GCMをAndroidアプリに統合しました。私のアプリはGCMで3ヶ月前から公開されています。GCM(Google Cloud Messaging)は登録ユーザー全員にアクセスできない
私はGoogleの指示に従い、デバイス(Nexus HTC 9とテストした他のデバイスのデバイス)ですべて正常に動作します。
一般に、データメッセージ(「通知」キーなし)を送信し、onMessageReceivedメソッドで受信し、デバイスがデータを取得して受信データを処理するコードを実行すると、サーバーにpingを送信します例えば、通知を示します)。
アプリがフォアグラウンド、バックグラウンド、または(デバイスを再起動した後も)で閉じていても、デバイスはデータを取得します。
しかし...
毎週1〜2週間、私は私のすべてのユーザーにデータメッセージを送信するが、私はまだ存在している登録トークンのうち、そのもののためにそれに気づきましたGCMの回答から「成功」と「メッセージID」が得られました。最終的にユーザーの約50%に達するようになりました(一部の国ではさらに少なくなっています)。 例えば、これは応答である、場合:
は{ "multicast_id": 108,
"success": 5000,
"failure": 300,
"canonical_ids": 0,
"results": [
{ "message_id": "1:08" },
{ "message_id": "1:09" }
...
....
....
...
]
}
「成功」は5000を言いますが、onMessageReceived方法が唯一の2500人のユーザーで実行されます...私はまた、FCMを確認するための診断だった
メッセージのステータスがidsで、デバイスがメッセージを受信しているようです。
GCMから提供された登録トークンを使用してユーザーが自分のサーバーに正常に登録すると、すぐに「テスト/ダミー」データが表示されますユーザーがそれを取得し、私のコードが実行されていることを確認し、私のサーバーにpingを送信する - この "ループ"は、ユーザーのほぼ100%のために働いた...
それで1-2週間後には、ユーザーは約100%から50%に低下します...?
(私は私のアプリをアンインストールしていなかったもののためにのみ話している)これは私がGcmListenerServiceの実装で使用するものです。
public class GcmMessageHandler extends GcmListenerService {
@Override
public void onMessageReceived(String from, Bundle data) {
...
...
Context context = getBaseContext();
sendPingtoMyServer(context)
}
}
、これはマニフェストです:
<service
android:name="[MY_PACKAGE].GcmMessageHandler"
android:exported="false" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</service>
<receiver
android:name="com.google.android.gms.gcm.GcmReceiver"
android:exported="true"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="[MY_PACKAGE]" />
</intent-filter>
</receiver>
ご協力いただければ幸いです。
おかげで、この私の経験で
トピックメッセージングを試してみましたが、ケースも同じですか? (機能のような*配送確認*を実装せずにトピックを通して送信されたメッセージを追跡することはできませんが) –
テストしませんでしたが、あなたが言ったように、それを追跡することはできません:)おそらく同じ問題。私にとって奇妙なのは、サーバーにpingしていないメッセージIDを取得し、FCM診断ツールを使用して確認すると、ツールにはIDが正常にデバイスに配信されたことが示されます。 – JohnSKat
この問題の解決策を見つけましたか? –