4

http://developer.android.com/guide/google/gcm/gs.html#server-appに従って、アプリケーションに GCM を実装しました

                    GCMRegistrar.checkDevice(this);
        GCMRegistrar.checkManifest(this);
        if (GCMRegistrar.isRegistered(this)) {
            Log.d(TAG, GCMRegistrar.getRegistrationId(this));
        }
        final String regId = GCMRegistrar.getRegistrationId(this);

        if (regId.equals("")) {
            GCMRegistrar.register(this, sender_id);
            Log.d(TAG, "Registration id :  "+GCMRegistrar.getRegistrationId(this));
        }
            else {
            Log.d("info", "already registered as" + regId);
        }

登録IDとして空の文字列を返します登録IDを取得するために他に何が必要ですか??

4

12 に答える 12

10

空の文字列は、デバイスが正常に登録されていない場合に表示されます。それには以下の理由があるかもしれません-

  1. GCMコードをアプリケーションパッケージに入れます。[同じ名前のアプリケーションパッケージで別のパッケージを作成できます]
  2. すべての権限を適切に設定します。
于 2012-08-13T12:42:08.040 に答える
3

また、空の登録IDを取得し、最終的に修正しました。これが私の解決策です:

1)プロジェクトIDを確認します。これは、Google APIのコンソールのハイパーリンクに表示される12文字の長さである必要があります(プロジェクトの概要で指定したプロジェクトIDではありません)
。2)最後の文字列regId文字列regIdに変更してみてください。理由はわかりませんが、うまくいきます。

それが役に立てば幸い。

于 2012-07-15T04:47:47.470 に答える
1
    GCMRegistrar.checkDevice(this);
    GCMRegistrar.checkManifest(this);
    final String regId = GCMRegistrar.getRegistrationId(this);

    if (regId.equals("")) {
        GCMRegistrar.register(this, "YOUR_ACCOUNT");
    } else {
        app.prefs.edit().putString("prefs_googleid", regId).commit();
        GCMRegistrar.setRegisteredOnServer(this, true);
        Log.v(TAG, "Already registered");
    }

次に、onRegistered ovverride で GCMBaseIntentService を拡張するレシーバーでコールバックを待ちます。そこで ID 登録を取得します。

とにかく、この投稿に従ってGCMを使用するアプリを完全に作成します: http://developer.android.com/guide/google/gcm/gs.html

于 2012-07-05T09:45:54.317 に答える
1

同じ問題が発生しました。解決策は次のとおりです。

GCMIntentService (GCMBaseIntentService から拡張)を実装する必要があります。そしてしないでください!!! GCMIntentServiceの名前を別のものに変更します。これが私の場合の理由でした。

于 2012-09-09T16:16:21.953 に答える
1

Eclipseでアプリケーションの名前と同じ名前のGoogleコンソールを使用して新しいプロジェクトを作成すると、この問題を解決するのに役立ちました。

于 2013-01-27T05:59:58.977 に答える
0

GCMRegistrar.register(これ、sender_id); Log.d(TAG, "登録 ID : "+GCMRegistrar.getRegistrationId(this));

register() の直後に getRegistrationId() を呼び出すと、 register がすぐに ID を返さない可能性があるため、危険です。

私の場合、後でスクリプトで(ボタンを押したときに)次を使用してチェックを行いました。

boolean registered = GCMRegistrar.isRegistered(this);

登録されている場合は、GCMRegistrar.getRegistrationId(this)) を呼び出します。IDを登録してもらいます。

于 2013-08-02T05:29:58.407 に答える
0

また、空の文字列を登録 ID として取得し、次のように解決しました。

  1. senderId が正しいかどうかを確認してください。
  2. デバイスにサインインしているアクティブな Google アカウントがあるかどうかを確認します。
  3. マニフェスト ファイルで権限が正しく定義されているかどうかを確認します。
于 2012-07-19T08:59:00.573 に答える
0

Nick Wong の 2 番目の解決策を試しましたが、=> public static final String PROPERTY_REG_ID = "registration_id"; を => に 変更しました。public static String PROPERTY_REG_ID = "registration_id";

そして単にそれが機能しました。

于 2013-12-12T21:07:08.137 に答える
0

GCMRegistrar.getRegistrationId は非同期なので、regId が実際に空かどうかを確認するカウンターを追加しました。空の場合、カウンターは増加し、登録 ID を再度取得しようとします。100 などのかなり大きな数で十分です。

int counter = 0;
                while (true) {
                    regID = GCMRegistrar.getRegistrationId(this);
                    counter++;
                    if (counter == 100 || regID != null || !regID.equals("")) {
                        break;
                    }
                }
于 2014-09-25T11:15:35.250 に答える
0

GCMRegistrar.register への登録に使用するプロジェクトをプロジェクト名から Google プロジェクト番号に変更して解決しました

于 2015-06-05T17:20:04.263 に答える