4

Android の GCM に問題があります。私のテストデバイス(Droid2)の1つでコールバックの実行に失敗するonRegistered()か、適切なregIdを返すことはありませんが、別のデバイス(Galaxy Nexus)では完全に機能します。

基本的な例hereに従っています。呼び出し元は次のようになります。

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

final String regId = GCMRegistrar.getRegistrationId(this);

if (regId.equals(""))
    GCMRegistrar.register(this, Constants.SENDER_ID);
else
    Log.v(TAG, "Already registered");

そして私のマニフェストはこれを持っています:

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

<receiver
    android:name="com.google.android.gcm.GCMBroadcastReceiver"
    android:permission="com.google.android.c2dm.permission.SEND" >
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
        <category android:name="com.gcl.myapp" />
    </intent-filter>
</receiver>

onRegistered()コールバックが機能しないのはなぜですか? そして、あるデバイスでは動作するが、別のデバイスでは失敗する原因は何ですか?? ありがとう。

4

2 に答える 2

5

一部のデバイスでは機能するが他のデバイスでは機能しない場合は、次のいずれかを使用してください。

  • Android 4.0.4 より前のデバイスでは、有効な Google アカウントが必要です。
  • GCM は、Play ストア アプリと API 8 以降を搭載したデバイスでのみ動作します。
  • マニフェストの形式が正しくありません - Lint を使用して確認してください!
  • デバイス/アプリは既に登録されています。Play の実装は再度返されない可能性があります。GCMRegistrar.unregister(this);最初に試してください。

それが役立つことを願っています!

于 2012-11-18T19:48:09.517 に答える
0

私も同じ問題を抱えていました。AngularJS + IonicFramework を使用している場合は、これを行う必要はありません。

onDeviceReady 関数を使用してファクトリを作成すると、onNotificationGCM 関数が作成されます。このようなもの:

app.factory('PushProcessingService', function () {
..

});

function onNotificationGCM(e) {
}

工場内で onNotificationGCM を作成していました。これは私の問題を解決します。

于 2014-10-31T13:46:54.727 に答える