2017-12-19 20 views
9

FCMを使用して、アプリのユーザーに通知を送信します。 また、Firebase Analyticsを使用して、アプリの動作に関するフィードバックを得ることもできます。FCMはすべてのトピックのサブスクライバに通知を送信しません(データ通知)

私は、デフォルトのアクティビティを開始するときに特定のトピックにサブスクライブするアプリを持っています。つまり、基本的に少なくとも1回はアプリを起動したすべてのユーザーがトピックのサブスクライバです。 firebase分析から、私は過去30日間のイベントログで21374 first_openを見ることができます。 この金額は、「アクティブユーザー」のダッシュボードにも表示されます。

したがって、基本的には少なくとも21,000人のサブスクライバがトピックに対応しているはずです。

私は昨日このトピックに通知を出しました。 データ通知ですので、アプリのバックグラウンド/フォアグラウンド/未開始の状態に問題はありません。

onMessageReceivedメソッドでは、firebase分析でイベントを記録します。そして、明らかに、のユーザーだけが、という通知を受け取りました。

加入者数と通知が効果的にユーザーにプッシュされる理由については、どのように説明できますか?

リンクすることができますいくつかの要素:

  • アプリは3日前にストアに更新されました。そのため、ユーザーは新しいバージョンのアプリを起動していない可能性があります。しかし、更新は、以前のバージョンですでに購読しているトピックを削除すべきではありません。 これを確認するためにいくつかのテストを実行しましたが、アップデートでは以前のバージョンで購読されたトピックは削除されません(アプリケーションが最初にアンインストールされていない限り)。 これは、この問題の理由であってはなりません。

  • GooglePlayServices/Firebaseパッケージの新しいバージョン(9.2から10.0.1へ)でアップデートされました GooglePlayServices/Firebaseパッケージの古いバージョンで購読しているすべてのトピックを削除しますか?

加入者との間のこのような違いにつながることができ、他の理由があるが&通知配信回数を数えますか? 、

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    GoogleApiAvailability googleApiAvailability = GoogleApiAvailability.getInstance(); 
    int success = googleApiAvailability.isGooglePlayServicesAvailable(this); 
    if(success != ConnectionResult.SUCCESS) { 
     googleApiAvailability.makeGooglePlayServicesAvailable(this); 
    } 

    FirebaseMessaging.getInstance().subscribeToTopic("mytopic"); 

環境モバイルに関連+着用される使用のGoogle Play Servicesのバージョン:


@Bobはスナイダー

はここでGoogleがサービスのバージョンを再生するために私がチェックする方法です多くのユーザーがGooglePlayServiceのバージョンを更新するのが難しいため、一般に最新バージョンよりも低いバージョンを使用し、必要な場合にのみ更新します。


@Jorgesys

私FirebaseMessagingServiceは実際には非常に簡単です:

public class MyFirebaseMessagingService extends FirebaseMessagingService { 
@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    Logger.d("From: " + remoteMessage.getFrom()); 

    MyFirebaseAnalytics mAnalytics = new MyFirebaseAnalytics(this); 
    mAnalytics.logEvent("notif", "reception"); 

    Map<String, String> data = remoteMessage.getData(); 
    // Check if message contains a data payload. 
    if (data.size() > 0) { 
     Logger.d("Message data payload: " + data); 
} 

LogEventメソッドがFirebase上のイベントをログに記録するものです。

+0

アプリを削除したなど実際のカウントで最新ではないでしょうか? –

+0

Firebase分析は7.8k app_removeを報告しますので、それは問題ではありません。 7.8kアプリが削除されたのは、前月にアプリをインストールしたユーザーの一部である可能性があります。 まだ1万人を超えるユーザーがいません(21k - 7.8k削除 - 2.9k受信) –

+0

"データ通知"と言えば、メッセージに[データペイロードと通知ペイロード](https:// firebase)があることを意味しますか? google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages)? –

答えて

3

はさてここ要因となり得るものの数に制限はありません。

1)人々は、あなたのアプリに

2)人々は「強制停止」を使用した可能性がありますあなたのアプリを削除したことがあり

3)Analyticsのデータは、通常は、それが不完全になることができますログインするためにいくつかの時間がかかる

4)そのトピックのメッセージがトピックメッセージの有効期限までにキャッシュされたユーザーがネットワークに接続されていない(デフォルト)を4週間れる

5)ユーザーは、インスタンスIDは無効とトピックメッセージも退会し得るばかりにつながるアプリのデータをクリアしている場合があります。あなたが最後に再購読ロジックを持っていない場合、それらは購読を停止したままになります。

6)新しいアンドロイド版では、あなたのアプリがしばらく開いていない(Googleがその金額を開示していない)場合や、アプリケーションに表示されているコンポーネント、例えばフォアグラウンドサービス、通知アプリはキャッシュされ、通知は通常どおり配信されません。これは、Appスタンバイ

7)データメッセージの満了する時間が経過すると、その時点で、ユーザーがFCMサーバに接続してメッセージを取得していないです。

8)いくつかの状況では、FCMは、メッセージを配信しないことができます。あまりにも多くのメッセージ(> 100)デバイスは一ヶ月以上にFCMに接続されていない場合、それは接続しているか、一度に特定のデバイス上のアプリの保留がある場合に発生します。これらのケースでは、あなたはFirebaseMessagingService.onDeletedMessages()へのコールバックを受け取ることができる

あり21Kを示す話題の画面のように貢献し、他の要因もよいが、それは

+0

にこれを追加しました。私には以下の値があります。月= 21k、週= 7k&day = 1.2k。たとえ一部の人が削除(アプリケーション)(限界)またはデータ(限界)またはアンドロイドO(さらに限界)を停止しても、私の最後のセッションからの "4k通知"は説明されません。別のセッションでは私は8kを持っていて、そしてもう1つは5kをちょうど3日後に持っています。私はFCMを使用するので、私は唯一の6つのメッセージを送ったので、私はこれまで、あなたの質問が広いので100 –

+0

からだ、そう私の答えの相棒でした。完全な情報がありませんでした。また、私は特定のトピックにユーザーをどのように購読しているのかわかりません。彼らが購読を取りやめられるかもしれないかもしれない – Kushan

関連する問題