web-dev-qa-db-ja.com

GCM「エラー:未登録」

GCMコードのテストに成功しました。

しかし、まったく同じコードで、GCM Pushを取得できませんでした。

GCMエラー:登録されていません。

40
LKM

GCM応答Not Registeredは、「NotRegisteredの場合、アプリケーションがデバイスからアンインストールされたか、com.google.Androidを受信するように構成されたブロードキャストレシーバーがないため、サーバーデータベースから登録IDを削除する必要があります。 c2dm.intent.RECEIVEインテント。」 from ドキュメント 。アプリがデバイスからアンインストールされたとき、またはAndroidManifestで間違ったブロードキャストレシーバーを記述したときに、どのような場合にこのエラーが発生するかを確認してください。 my test GCM server でGCM機能をテストできます。これがお役に立てば幸いです。

52
Samik

デバイスをテストに使用している場合は、トークンを取得して再テストする前にInstanceIDを削除する必要があります。APKを上書きすると、そのInstanceIdが登録解除され、NotRegisteredエラーが発生するためです。したがって、RegisterIntentServiceクラスのonHandleIntent関数で次のことを行います。

InstanceID instanceID = InstanceID.getInstance(this);
try
{
    instanceID.deleteInstanceID();
} catch(IOException e) 
{
    e.printStackTrace();
}
instanceID = InstanceID.getInstance(this);
18
Rhodesie

Not Registeredは、デバイスがメッセージを処理できなかったとGCMが判断したときに発生します。これは、アプリがアンインストールされているか、メッセージを処理するように誤って構成されている場合に発生します。

enter image description here

@Samikと@ O'Rillaの回答に基づいて、次の手順をお勧めします。

  1. Androidデバイスから現在のインストールをアンインストールします
  2. <receiver><sender><application>AndroidManifest.xmlノードで定義されていることを確認してください。
  3. <category Android:name="COM.COMPANY.YOURAPP" />に正しい<receiver>があることを確認してください
  4. Receiverの実装が正しいことを確認してください
9

あなたのコードが正しいと思っているのにまだエラーが出る場合

{"error": "NotRegistered"} 

電話から手動でアプリをアンインストールして、もう一度実行してみてください(デバイスは新しい登録IDを取得します)。

少なくとも私の場合、問題は解決しました!

5
naren

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.jsonfile for my Android app。

また、RegistrationIntentServiceはパッケージのルートにある必要があります。そうでないと機能しません。 (Androidへのgcm実装については、このサンプルを参照してください: https://github.com/google/gcm

私はこれで日を失ったので、これが誰かを助けることを願っています!!!! > <

2
Micro

マニフェストファイルでアプリケーションの外部にgcmレシーバーがある場合、このエラーが発生しました。レシーバーをアプリケーションスコープに移動すると、すべてが機能しました。とても幸せなウサギです。

<application>
...
<receiver>
...
</receiver>
...
</application>
2
G O'Rilla

Googleアカウントは、Android 4.0.4以前を実行しているデバイスの要件です。 http://developer.Android.com/google/gcm/gcm.html

マニフェストファイルに<uses-permission Android:name="Android.permission.GET_ACCOUNTS" />も追加する必要があります。

1
ztan

これは、単にあなたが間違った登録IDを与えていることを意味します。そのため、最初にモバイルアプリケーションを実行すると、登録IDがトークンとして取得されます。このトークンを登録IDとしてアプリサーバーコードに追加します。アプリIDには、Google開発者コンソール、プロジェクト、および資格情報から取得できるサーバーIDを指定します。送信者IDには、プロジェクトから取得できるプロジェクトID、開発者コンソールの設定を設定します。

0