私は自分のアプリでGCMを使用しており、InstanceId
APIを使用してGCMトークンを生成しています。私はInstanceId
APIによって返されたトークンが無効であるこの問題に直面しています。InstanceID APIによって返されたGCMトークンはNotRegisteredエラーを返します
私はPostmanを使用してトークンをチェックしています。そして、あるデバイスでは、トークンを使用しようとすると、NotRegisteredエラーがスローされます。しかし、私が強制的にGCMInstanceIdListener
サービスを実行すると、GCMRegistrationService
が再度呼び出され、今度は正しいトークンを取得します。
GCMRegistrationService
で受け取ったトークンが有効かどうかを確認する方法はありますか?私はhttps://android.googleapis.com/gcm/send
を呼び出してトークンを確認することができますが、ヘッダーに渡されるサーバーキーが必要であり、クライアントに保管したくありません。
これは私のコードがどのように見えるかです:
public class GCMInstanceIdListener extends InstanceIDListenerService {
@Override
public void onTokenRefresh() {
Intent intent = new Intent(this, GCMRegistrationService.class);
startService(intent);
}
}
public class GCMRegistrationService extends IntentService {
private static final String TAG = "GCMRegistrationService";
public GCMRegistrationService() {
super(TAG);
}
@Override
protected void onHandleIntent(Intent intent) {
InstanceID instanceID = InstanceID.getInstance(this);
String token = instanceID.getToken(BuildConfig.GCM_SENDER_ID,
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
Log.d(TAG, "GCM Token : " + token);
}
}
私はそれを行うことができましたが、私たちのユースケースでは、初めてアプリケーションを開くとすぐにユーザーにプッシュメッセージを送信する必要があります。 'GCMRegistrationService'を実行すると、2回目以降のみに役立ちます。クリーンインストールでも、初めてGCMRegistrationServiceが呼び出されたとき、私は無効なトークンを取得します。 – akshayt23
Googleのgcmクライアントの例に従ってみませんか?ローカルブロードキャストを使用して、登録が完了したことをアクティビティに通知します。残りのロジックを進めることができます。無効なトークンについては、あなたのgoogle-services.jsonがフォールト(ファイルが破損している)か、GET_ACCOUNTS権限(Android 6.0+権限の問題あり、おそらく)がないことが考えられます。 – Rohan
うーん、私はそれを確認します。私たちのマニフェストには 'GET_ACCOUNTS'パーミッションがありますが、jsonファイルを数回再コピーしましたが、問題は解決しません。 – akshayt23