gpt4 book ai didi

使用 GoogleCloudMessaging 的 Android gcm 客户端

转载 作者:行者123 更新时间:2023-11-29 17:58:45 25 4
gpt4 key购买 nike

我正在使用 gcm 描述的新方法 here使用 GoogleCloudMessaging 类。但是 10 次中有 9 次出现 SERVICE_NOT_AVAILABLE 错误。只有一次它注册了一个设备。

07-01 14:24:55.907    2074-2090/com.deveyes.carrefour          W/System.err:                   java.io.IOException: SERVICE_NOT_AVAILABLE

07-01 14:24:56.037 2074-2090/com.deveyes.carrefour W/System.err: at com.google.android.gms.gcm.GoogleCloudMessaging.register(Unknown Source)

我的 Activity 中的代码如下:

 .....
gcmRegId = gcm.register(CarrefourConfig.GCM_SENDER_ID);
.....

后来才知道需要用到Automatic retry。我读过this但这份文件似乎很旧。与新方法一样,我们不再使用 IntentService。还是我们?在 BroadcastReciever 中,我可以获取消息并通知用户。

我做错了什么?

编辑:

我的 list :

<?xml version="1.0" encoding="utf-8"?>

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />


<supports-screens
android:xlargeScreens="false"
/>


<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<uses-feature android:name="android.hardware.location" android:required="true" />
<uses-feature android:name="android.hardware.location.gps" android:required="false" />

<permission
android:name="com.deveyes.carrefour.android.MAPS_RECEIVE"
android:protectionLevel="signature" />


<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />

<uses-permission android:name="com.deveyes.carrefour.android.permission.MAPS_RECEIVE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />


<permission android:name="com.deveyes.carrefour.android.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.deveyes.carrefour.android.permission.C2D_MESSAGE" />

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


<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.Carrefour"
android:name=".CarrefourApplication">

<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyCKznwauzk_rNdKf7Qw0rjpmf4AWchCRwI" />

<activity
android:name=".ui.MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>


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

<!--service android:name=".services.CarrefourLocationService" /-->


</application>

我的主要 Activity :

private void registerBackground() {

new AsyncTask(){

@Override
protected Object doInBackground(Object[] objects) {

try {
if(gcm == null){
gcm = GoogleCloudMessaging.getInstance(context);
}
gcmRegId = gcm.register(CarrefourConfig.GCM_SENDER_ID);

Log.i(TAG,"regid:"+gcmRegId);

setRegistrationId(context,gcmRegId);
ServerUtilities.register(context,gcmRegId);


} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}.execute(null,null,null);
}

最佳答案

问题来了:

您应该在下面的所有 3 个地方使用相同的包名称,但在某些情况下您使用 com.deveyes.carrefour.android 而在某些情况下使用 com.deveyes.carrefour其他情况。

<permission android:name="com.deveyes.carrefour.android.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.deveyes.carrefour.android.permission.C2D_MESSAGE" />
...
<receiver
android:name=".gcm.GCMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.deveyes.carrefour" />
</intent-filter>
</receiver>

如果您的包名称是 com.deveyes.carrefour,请将 list 更改为:

<permission android:name="com.deveyes.carrefour.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.deveyes.carrefour.permission.C2D_MESSAGE" />
...
<receiver
android:name=".gcm.GCMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.deveyes.carrefour" />
</intent-filter>
</receiver>

关于使用 GoogleCloudMessaging 的 Android gcm 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17405458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com