GCMコードのテストに成功しました。
しかし、まったく同じコードで、GCM Pushを取得できませんでした。
GCMエラー:登録されていません。
GCM応答Not Registered
は、「NotRegistered
の場合、アプリケーションがデバイスからアンインストールされたか、com.google.Androidを受信するように構成されたブロードキャストレシーバーがないため、サーバーデータベースから登録IDを削除する必要があります。 c2dm.intent.RECEIVEインテント。」 from ドキュメント 。アプリがデバイスからアンインストールされたとき、またはAndroidManifestで間違ったブロードキャストレシーバーを記述したときに、どのような場合にこのエラーが発生するかを確認してください。 my test GCM server でGCM機能をテストできます。これがお役に立てば幸いです。
デバイスをテストに使用している場合は、トークンを取得して再テストする前にInstanceIDを削除する必要があります。APKを上書きすると、そのInstanceIdが登録解除され、NotRegisteredエラーが発生するためです。したがって、RegisterIntentServiceクラスのonHandleIntent関数で次のことを行います。
InstanceID instanceID = InstanceID.getInstance(this);
try
{
instanceID.deleteInstanceID();
} catch(IOException e)
{
e.printStackTrace();
}
instanceID = InstanceID.getInstance(this);
Not Registered
は、デバイスがメッセージを処理できなかったとGCMが判断したときに発生します。これは、アプリがアンインストールされているか、メッセージを処理するように誤って構成されている場合に発生します。
@Samikと@ O'Rillaの回答に基づいて、次の手順をお勧めします。
<receiver>
と<sender>
が<application>
のAndroidManifest.xml
ノードで定義されていることを確認してください。<category Android:name="COM.COMPANY.YOURAPP" />
に正しい<receiver>
があることを確認してくださいあなたのコードが正しいと思っているのにまだエラーが出る場合
{"error": "NotRegistered"}
電話から手動でアプリをアンインストールして、もう一度実行してみてください(デバイスは新しい登録IDを取得します)。
少なくとも私の場合、問題は解決しました!
GCMの古い非推奨コードを使用していました。
if (gcm == null) {
gcm = GoogleCloudMessaging.getInstance(this);
}
String regId = gcm.register(SENDER_ID);
msg = "Device registered, registration ID=" + regId;
そして、新しい方法に切り替えようとすると:
InstanceID instanceID = InstanceID.getInstance(this);
String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
私は同じエラーを受け取っていましたが、それは私を2日間しっかりと動かしていました。
本のすべてを修正した後、デベロッパーコンソールでGCMを無効にしてから再度有効にし、次の場所に移動しました: https://developers.google.com/mobile/addgoogle-services.json
file for my Android app。
また、RegistrationIntentService
はパッケージのルートにある必要があります。そうでないと機能しません。 (Androidへのgcm実装については、このサンプルを参照してください: https://github.com/google/gcm )
私はこれで日を失ったので、これが誰かを助けることを願っています!!!! > <
マニフェストファイルでアプリケーションの外部にgcmレシーバーがある場合、このエラーが発生しました。レシーバーをアプリケーションスコープに移動すると、すべてが機能しました。とても幸せなウサギです。
<application>
...
<receiver>
...
</receiver>
...
</application>
Googleアカウントは、Android 4.0.4以前を実行しているデバイスの要件です。 http://developer.Android.com/google/gcm/gcm.html
マニフェストファイルに<uses-permission Android:name="Android.permission.GET_ACCOUNTS" />
も追加する必要があります。
これは、単にあなたが間違った登録IDを与えていることを意味します。そのため、最初にモバイルアプリケーションを実行すると、登録IDがトークンとして取得されます。このトークンを登録IDとしてアプリサーバーコードに追加します。アプリIDには、Google開発者コンソール、プロジェクト、および資格情報から取得できるサーバーIDを指定します。送信者IDには、プロジェクトから取得できるプロジェクトID、開発者コンソールの設定を設定します。