3

いくつかのフォーラムページを試し、stackoverflowで同じことを検索しましたが、解決策が見つかりませんでした。

以下のコードを使用して、GCM通知の登録IDを生成しました。しかし、登録IDとして空の文字列を取得します。

GCMRegistrar.checkDevice(this); GCMRegistrar.checkManifest(this);

if(GCMRegistrar.isRegistered(this)){Log.d( "info"、GCMRegistrar.getRegistrationId(this)); }

regId = GCMRegistrar.getRegistrationId(this);

Log.v("log", " register id oslo : " + regId);

if (regId.equals("")) {
    // replace this with the project ID
    GCMRegistrar.register(this, "718437041388");
    Log.d("info", GCMRegistrar.getRegistrationId(this));
} else {
    Log.d("info", "already registered as" + regId);
}

これを手伝ってください、何か問題があったら教えてください。

よろしくお願いします、ニラブ。

4

5 に答える 5

7

直後にregistrationIdを取得するべきではありませんGCMRegistrar.register(this, "718437041388");
実際、GCMIntentService.javaregIdを受け取る正しいものはありますか?
はいの場合、onRegistered内部からregIdを取得できますGCMIntentService.java

 @Override
    protected void onRegistered(Context context, String registrationId) {
        Log.i(TAG, "Device registered: regId = " + registrationId);
        Log.d("GCMIntentService", "in GCMIntentService");
        displayMessage(context, getString(R.string.gcm_registered));
        ServerUtilities.register(context, registrationId);
    }
于 2012-07-12T09:05:35.697 に答える
5

注意してください

    GCMRegistrar.register(this, "...");

非同期です。GCMRegistrar.getRegistrationId(this)したがって、その直後に呼び出すことは信頼できないので、避ける必要があります。

IDはGCMIntentService、登録手順の一部として、ブロードキャストコールバックを介してに到着します。そこから、gcmキーを好きな場所に保存して、アプリケーションの他の部分(通常はサーバー上)で使用できます。

GCMIntentServiceアプリを機能させるには、アプリのルートパッケージで定義する必要があることに注意してください。

于 2012-07-31T08:18:07.687 に答える
1

Google APIでエミュレータを使用してみてください。また、Googleアカウントと同期してください。

于 2012-11-22T12:41:51.047 に答える
0

解決策を見つけた1日の苦労の後、私は同じ問題を抱えています。まず、GCM関連コードをメインパッケージに入れ、androidManifest.xmlのパッケージに従って変更します

簡単な例を挙げます。私のプロジェクト名はGCMExampleで、3つのパッケージがあります1. com.examle.GCMExample(メインパッケージ)、2。com.examle.GCMExample.activity(2番目のパッケージ)、3。com.example.GCMExample.adapter(3番目のパッケージ)

GCM関連のクラスファイルを2番目のパッケージに入れると、登録IDが取得されません

1. GCMIntentService、2。ServerUtilities、3。CommonUtilities4.WakeLockerを私のメインパッケージに入れたような私のGCM関連クラスcom.example.GCMExample

また、私のandroidManifest.xml

         <uses-permission android:name="android.permission.INTERNET" />
         <uses-permission android:name="android.permission.GET_ACCOUNTS" />
         <uses-permission android:name="android.permission.WAKE_LOCK" />
         <uses-permission android:name="android.permission.VIBRATE" />

         <permission android:name="com.example.GCMExample.permission.C2D_MESSAGE"
            android:protectionLevel="signature" />

         <uses-permission android:name="com.example.GCMExample.C2D_MESSAGE" />

       <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
   <receiver
            android:name="com.google.android.gcm.GCMBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
            <!-- Receives the actual messages. -->
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <!-- Receives the registration id. -->
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

            <category android:name="com.example.GCMExample" />
          </intent-filter>
  </receiver>  

 <service android:name="com.example.GCMExample.GCMIntentService" />
于 2014-02-20T05:44:33.657 に答える
0

プロジェクトのlibフォルダーにGCMjarファイルを追加します

于 2015-02-12T11:48:24.273 に答える