在我的 monodroid 应用程序中,我在使用 pushSharp 为推送通知注册某些设备时遇到问题。我的一般推送通知设置在 SGS2、SGS3 和 Nexus7 等新设备上运行良好,但在运行 2.2 和 2.2.1 的 Legend 和 Hero 上,注册失败(在调试中运行良好)。我已将问题缩小到 StartService 调用:
var intent = new Intent(GCMConstants.INTENT_TO_GCM_REGISTRATION);
intent.SetPackage(GSF_PACKAGE);
intent.PutExtra(GCMConstants.EXTRA_APPLICATION_PENDING_INTENT,
PendingIntent.GetBroadcast(context, 0, new Intent(), 0));
intent.PutExtra(GCMConstants.EXTRA_SENDER, senders);
context.StartService(intent);
清单文件看起来不错:
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="10" />
<uses-permission android:name="android.permission.INTERNET" />
...
<!-- Google Cloud Messaging (GCM) for push messages -->
<permission android:name="my.package.name.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="my.package.name.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
意图看起来很好(act = com.google.android.c2dm.intent.REGISTER pkg = com.google.android.gsf)并且senderId是正确的,但是GCMIntentService OnReceive方法永远不会被触发......
有时使用 logcat 可以看到以下错误消息(尽管不一致):
E/C2DMRegistrar( 302): [C2DMReg] handleRequest caught java.io.IOException: SSL shutdown failed: I/O error during system call, Broken pipe.
我不太确定如何解决这个问题,并希望得到任何帮助。
谢谢彼得