为什么我使用 Google Cloud Messaging 得到 intent.REGISTRATION
Why am I getting intent.REGISTRATION with Google Cloud Messaging
我一直在尝试在我的 Android 应用程序中实施 GCM。但是,在遵循教程 http://developer.android.com/google/gcm/client.html
之后
我正在获取带有额外 "unregistered" 的意向类型 REGISTRATION,尽管我希望获得一些数据。
在应用程序开始时,我注册没有问题,并收到发送到我的服务器的注册 ID。我也用amazon sns.
BroadcastReceiver 和 IntentService 在我的主包内的单独包中。
清单:
package="my.main.package">
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.google.android.c2dm.permission.REGISTER" />
<uses-permission android:name="my.main.package.permission.C2D_MESSAGE" />
<permission android:name="my.main.package.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<receiver
android:name=".gcm.FDGcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.cd2m.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="my.main.package" />
</intent-filter>
</receiver>
<service android:name=".gcm.FDGcmIntentService"/>
广播接收者:
public class FDGcmBroadcastReceiver extends WakefulBroadcastReceiver {
private static final String TAG = "FDGcmBroadcastReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "on receive, " + intent.getAction());
// Explicitly specify that GcmIntentService will handle the intent
ComponentName componentName = new ComponentName(context.getPackageName(), FDGcmIntentService.class.getName());
// Start the service, keeping the device awake while it is launching
startWakefulService(context, intent.setComponent(componentName));
setResultCode(Activity.RESULT_OK);
}
}
我做错了什么?
Eran 的回答 here 解决了您的问题。
在您链接的 GCM 文档的第 2 步中,com.google.android.c2dm.intent.REGISTRATION
不在要包含在您的清单文件中的意图过滤器操作中。
我一直在尝试在我的 Android 应用程序中实施 GCM。但是,在遵循教程 http://developer.android.com/google/gcm/client.html
之后我正在获取带有额外 "unregistered" 的意向类型 REGISTRATION,尽管我希望获得一些数据。 在应用程序开始时,我注册没有问题,并收到发送到我的服务器的注册 ID。我也用amazon sns.
BroadcastReceiver 和 IntentService 在我的主包内的单独包中。
清单:
package="my.main.package">
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.google.android.c2dm.permission.REGISTER" />
<uses-permission android:name="my.main.package.permission.C2D_MESSAGE" />
<permission android:name="my.main.package.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<receiver
android:name=".gcm.FDGcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.cd2m.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="my.main.package" />
</intent-filter>
</receiver>
<service android:name=".gcm.FDGcmIntentService"/>
广播接收者:
public class FDGcmBroadcastReceiver extends WakefulBroadcastReceiver {
private static final String TAG = "FDGcmBroadcastReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "on receive, " + intent.getAction());
// Explicitly specify that GcmIntentService will handle the intent
ComponentName componentName = new ComponentName(context.getPackageName(), FDGcmIntentService.class.getName());
// Start the service, keeping the device awake while it is launching
startWakefulService(context, intent.setComponent(componentName));
setResultCode(Activity.RESULT_OK);
}
}
我做错了什么?
Eran 的回答 here 解决了您的问题。
在您链接的 GCM 文档的第 2 步中,com.google.android.c2dm.intent.REGISTRATION
不在要包含在您的清单文件中的意图过滤器操作中。