В моем приложении для монодроидов у меня возникла проблема с регистрацией некоторых устройств для push-уведомлений с помощью pushSharp. Моя общая настройка push-уведомлений отлично работает на более новых устройствах, таких как SGS2, SGS3 и Nexus7, однако на Legend и Hero с версиями 2.2 и 2.2.1 регистрация завершается ошибкой в выпуске (отлично работает при отладке). Я сузил проблему до вызова 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.
Я не совсем уверен, как решить эту проблему, и буду признателен за любую помощь.
Спасибо Питер