gpt4 book ai didi

android - 设备未从新的 Google Cloud Messaging (NEW GCM) 接收消息

转载 作者:太空宇宙 更新时间:2023-11-03 12:08:46 25 4
gpt4 key购买 nike

请帮帮我我一直在浏览这个主题,并且仍然在这个新的 GCM 中学习

我的最后一个项目根据此链接使用 GCM Push

ht**://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/

但是现在,最后一个 GCM (C2DM) 已弃用,因此我们不再使用任何 GCMRegistrar

来,看看这个h**p://developer.android.com/google/gcm/c2dm.html有声明“Android Cloud to Device Messaging (C2DM) is deprecated. C2DM service will continue to maintain in the short term, but C2DM will accept new users, it will grant no new quotas"

我使用这个链接来学习这个概念

对于我使用的示例: https://code.google.com/p/gcm/source/browse/#git

我想,我已经按照要求完成了所有步骤

我已将我的项目引用到 google play 服务库

我也已将我的发件人 ID 更改为我的 Google 项目编号

我也收到了来自 GCM 的 RegID

但问题是,每当我点击发送按钮

它从不给我任何东西

从谷歌文档示例中,它说它应该 ECHO 返回我的设备,但它从来没有这样做

我检查了文档这个概念说 gcmbroadcastreceiver 将接收推送到我的设备的任何 GCM 消息,

所以我尝试登录那个广播公司的“OnReceive”,但它从不显示任何内容

我还尝试使用此文档实现 HTTP GCM 服务器 http://developer.android.com/google/gcm/http.html

我得到这样的回应{“multicast_id”:6256370624066466203,“成功”:1,“失败”:0,“canonical_ids”:0,“结果”:[{“message_id”:“0:1378114688323559%eab45603f9fd7ecd”}]}

但是我的日志从来没有显示过任何东西

这是我的广播接收器

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

Log.v("HAHA BANGET","masuk ke broadcastReceiver");

// Explicitly specify that GcmIntentService will handle the intent.
ComponentName comp = new ComponentName(context.getPackageName(),
GcmIntentService.class.getName());
// Start the service, keeping the device awake while it is launching.
startWakefulService(context, (intent.setComponent(comp)));
setResultCode(Activity.RESULT_OK);
}
}

这是我的 Intent 服务

public class GcmIntentService extends IntentService {
public static final int NOTIFICATION_ID = 1;
private NotificationManager mNotificationManager;
NotificationCompat.Builder builder;

public GcmIntentService() {
super("7134XXXXX");
}
public static final String TAG = "HAHA";

@Override
protected void onHandleIntent(Intent intent) {

Log.v(TAG,"MASUK INTENT NIH");

Bundle extras = intent.getExtras();
GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
// The getMessageType() intent parameter must be the intent you received
// in your BroadcastReceiver.
String messageType = gcm.getMessageType(intent);

if (!extras.isEmpty()) { // has effect of unparcelling Bundle
/*
* Filter messages based on message type. Since it is likely that GCM will be
* extended in the future with new message types, just ignore any message types you're
* not interested in, or that you don't recognize.
*/
if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) {
sendNotification("Send error: " + extras.toString());
} else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType)) {
sendNotification("Deleted messages on server: " + extras.toString());
// If it's a regular GCM message, do some work.
} else if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) {
// This loop represents the service doing some work.
for (int i = 0; i < 5; i++) {
Log.i(TAG, "Working... " + (i + 1)
+ "/5 @ " + SystemClock.elapsedRealtime());
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
}
}
Log.i(TAG, "Completed work @ " + SystemClock.elapsedRealtime());
// Post notification of received message.
sendNotification("Received: " + extras.toString());
Log.i(TAG, "Received: " + extras.toString());
}
}
// Release the wake lock provided by the WakefulBroadcastReceiver.
GcmBroadcastReceiver.completeWakefulIntent(intent);
}

// Put the message into a notification and post it.
// This is just one simple example of what you might choose to do with
// a GCM message.
private void sendNotification(String msg) {
mNotificationManager = (NotificationManager)
this.getSystemService(Context.NOTIFICATION_SERVICE);

PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
new Intent(this, PushBaruLagi.class), 0);

NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.common_signin_btn_icon_dark)
.setContentTitle("GCM Notification")
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(msg))
.setContentText(msg);

mBuilder.setContentIntent(contentIntent);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
}
}

这是我的 list

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />


<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

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


<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >

<receiver
android:name="com.coba.pushgcmbaru.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.coba.pushgcmbaru" />
</intent-filter>
</receiver>
<service android:name="com.coba.pushgcmbaru.GcmIntentService" />

<activity
android:name="com.coba.pushgcmbaru.PushBaruLagi"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

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

我正在使用 2.2 FROYO

并且我已经将我的 google play 服务更新到最新的

伙计们,如果有人能帮助我,非常感谢:)

最佳答案

试试这个方法

更新:新的 GCM API 实现

1) 创建类 GcmIntentService.java

public class GcmIntentService extends IntentService {

public GcmIntentService() {
super("your project id here");
}

@Override
protected void onHandleIntent(Intent intent) {
// handle message here
}

}

2) 创建类 GcmBroadcastReceiver.java

public class GcmBroadcastReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
ComponentName comp = new ComponentName(context.getPackageName(),
GcmIntentService.class.getName());
context.startService((intent.setComponent(comp)));
setResultCode(Activity.RESULT_OK);
}

}

3) Mainfest.xml

GCM 权限

<permission
android:name="your.package.name.permission.C2D_MESSAGE"
android:protectionLevel="signature" />

<uses-permission android:name="your.package.name.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" />

<receiver
android:name="your.package.name.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<action android:name="com.google.android.c2dm.intent.GCM_RECEIVED_ACTION" />

<category android:name="your.package.name" />
</intent-filter>
</receiver>

<service
android:name="your.package.name.GcmIntentService"
android:enabled="true" />

--------------------旧API-------------------- --------------------------

public GcmIntentService() {
super("72544799xxx"); //Pass GCM project id here
}


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

<category android:name="com.coba.pushgcmbaru" />
</intent-filter>
</receiver>

<service
android:name="com.coba.pushgcmbaru.GCMIntentService"
android:enabled="true" />

创建 GCMReceiver 类并替换为您的 GcmBroadcastReceiver

import com.google.android.gcm.GCMBroadcastReceiver;

/**
* This Class Contains All Method Related To GCMReceiver.
*
* @author
*
*/
public class GCMReceiver extends GCMBroadcastReceiver {

@Override
protected String getGCMIntentServiceClassName(Context context) {
return GCMIntentService.class.getName();
}
}

关于android - 设备未从新的 Google Cloud Messaging (NEW GCM) 接收消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18570425/

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