到目前为止,我一直在开发一个没有问题的Android应用程序。上周一切正常,但今天我尝试注册到GCM服务器,我得到了Service_not_available。 我在网上搜索了可能是什么原因,因为它上周工作,仍然没有找到解决方案。我正在使用Android开发人员中的GCM Server示例。 这是我的AndroidManifest.xml
<permission
android:name="com.testing.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.testing.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>
<uses-permission android:name="android.permission.VIBRATE" >
</uses-permission>
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@drawable/icono_aplicacion"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:screenOrientation="portrait"
android:name="com.testing.MainActivity"
android:label="@string/app_name"
android:windowSoftInputMode="stateHidden" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:screenOrientation="portrait"
android:name="com.testing.Inicio"
android:windowSoftInputMode="stateHidden" >
</activity>
<receiver
android:name="com.testing.GCMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.testing" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.testing" />
</intent-filter>
</receiver>
<service android:name="com.testing.GCMIntentService" />
,当我打电话时,应用程序会抛出异常。
String regid = gcm.register(SENDER_ID);
任何想法如何解决这个问题?我已经尝试了4台没有运气的设备
答案 0 :(得分:0)
SERVICE_NOT_AVAILABLE可能意味着您的设备无法读取响应或服务器中有500/503。您可以尝试进行指数退避并再次重试。您已经拥有"com.google.android.c2dm.intent.REGISTRATION"
,因此我假设您正在处理BroadCastReceiver
中ID的刷新。同时检查您是否已从设备登录Google。您当然需要有效的Google帐户才能使用该服务。如果您更改了密码,只需检查是否已登录。还有一个类似的bug report尚未解决。跟踪它。
这是我的2美分问题。
答案 1 :(得分:0)
您是否有机会在调用gcm.register()之前设置断点?这将导致问题,因为设备时间将与gcm服务器不同步并导致调用失败。