- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在我的应用程序中实现 GCM
。我已按照 developer.android.com 的 GCM 教程中给出的所有步骤进行操作
我的应用程序的构建目标指向 Goolge API 8(Android 2.2 版本)
。
我能够从 GCM 成功获取注册 ID,并将此 ID 传递到我的应用程序服务器。至此注册步骤执行成功。
现在,当我的应用程序服务器向我的设备发送 PUSH 消息时,服务器收到的消息为 SUCCESS=1 FAILURE=0, etc.
,即服务器成功发送消息,但我的设备从未收到消息。
经过大量搜索,我了解到 GCM 在端口号 5228、5229 或 5230 上推送消息。
最初,我的设备和笔记本电脑被限制访问某些网站,但后来我被授予访问所有网站的所有权限,所以我猜这些端口号对我的设备是开放的。
所以我的问题是:极少数情况下,我收到来自 GCM 的 PUSH 消息。为什么谷歌在传递消息时如此不确定?可能是什么原因?
请查看我的以下代码并相应地指导我:
我在 list 中声明了以下内容:
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="8" />
<permission
android:name="package.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<!-- App receives GCM messages. -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<!-- GCM connects to Google Services. -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- GCM requires a Google account. -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<!-- Keeps the processor from sleeping when a message is received. -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="package.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<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" />
<category android:name="packageName" />
</intent-filter>
</receiver>
<receiver
android:name=".ReceiveBroadcast"
android:exported="false" >
<intent-filter>
<action android:name="GCM_RECEIVED_ACTION" />
</intent-filter>
</receiver>
<service
android:name=".GCMIntentService"
/>
/**
* @author Shrikant.
*
*/
public class GCMIntentService extends GCMBaseIntentService {
/**
* The Sender ID used for GCM.
*/
public static final String SENDER_ID = "myProjectID";
/**
* This field is used to call Web-Service for GCM.
*/
SendUserCredentialsGCM sendUserCredentialsGCM = null;
public GCMIntentService() {
super(SENDER_ID);
sendUserCredentialsGCM = new SendUserCredentialsGCM();
}
@Override
protected void onRegistered(Context arg0, String registrationId) {
Log.i(TAG, "Device registered: regId = " + registrationId);
sendUserCredentialsGCM.sendRegistrationID(registrationId);
}
@Override
protected void onUnregistered(Context context, String arg1) {
Log.i(TAG, "unregistered = " + arg1);
sendUserCredentialsGCM
.unregisterFromGCM(LoginActivity.API_OR_BROWSER_KEY);
}
@Override
protected void onMessage(Context context, Intent intent) {
Log.e("GCM MESSAGE", "Message Recieved!!!");
String message = intent.getStringExtra("message");
if (message == null) {
Log.e("NULL MESSAGE", "Message Not Recieved!!!");
} else {
Log.i(TAG, "new message= " + message);
sendGCMIntent(context, message);
}
}
private void sendGCMIntent(Context context, String message) {
Intent broadcastIntent = new Intent();
broadcastIntent.setAction("GCM_RECEIVED_ACTION");
broadcastIntent.putExtra("gcm", message);
context.sendBroadcast(broadcastIntent);
}
@Override
protected void onError(Context context, String errorId) {
Log.e(TAG, "Received error: " + errorId);
Toast.makeText(context, "PUSH Notification failed.", Toast.LENGTH_LONG)
.show();
}
@Override
protected boolean onRecoverableError(Context context, String errorId) {
return super.onRecoverableError(context, errorId);
}
}
谢谢。
最佳答案
检查调试证书是否过期,如果过期则创建新证书并生成新 key 。
关于android - GCM : onMessage() from GCMIntentService is called very few times,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13099089/
我的应用程序运行正常,但我遇到了以下错误: 10-04 14:04:38.182: W/MessageQueue(8625): Handler (android.media.MediaPlayer$E
我想将 GCMIntentService 放在包根目录以外的目录中。 GCM documentation指出 By default, it must be named .GCMIntent
在我的应用程序中,我使用了 GCM 服务。我想在 onMessage 函数中发出哔哔声或播放一个小的 mp3 文件。 我的 GCMIntentService 是从 GCMBaseIntentServi
我已经阅读了在这里找到的关于 WakeLock 的各种解决方案,例如在 AndroidManifest.xml 中添加 Permission 以及确保将 GCMIntentService 的 Cons
我正在尝试在我的 android 应用程序中实现 GCMIntentService。 当我尝试将注册 ID 保存在我的数据库中时,asynhttp 显示以下错误 "sending message to
我正尝试在我的 Android 应用中实现 GCM。服务器端和客户端设置似乎是正确的,因为当我从服务器端“推送”一个字符串时调用了 onMessage 方法。我可以从 Intent 中读取额外内容,但
我使用 GCM 在发布图片时收到通知,然后我下载并处理它: public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {
我在拥有多个自定义类型的帐户时遇到了问题。 我用GCM (Google Cloud Messaging)从我们的应用程序服务器接收消息。现在,由于您需要自己实现 GCMIntentService ex
这个问题在这里已经有了答案: 关闭9年前。 Possible Duplicate: Android RuntimeException: Unable to instantiate the servic
所以我遇到了一些问题。我试图让我的应用程序根据通过 GCM 收到的消息执行操作。在本例中,应该使用 TextToSpeech 类来发出声音。它有点有效,但不是我第一次发送消息。我意识到这可能是因为 T
未调用 GCMIntentService 的 onRegisterd() 方法。 在日志中显示如下:onReceive:com.google.android.c2dm.intent.REGISTRAT
我正在关注来自 Android 开发人员的 GCM 演示。遇到以下情况。我在 GCMIntentService 中的 OnHandleIntent 没有被调用。有人可以帮忙吗? package com
我正在尝试在 GCM 上注册我的应用程序,但我不知道为什么我的应用程序从未注册过。 GCMRegistrar.register(this, SENDER_ID); 被调用,但我的 GCMIntentS
使用 Google 的 GCM 服务构建 Android 应用程序。 我已经在 GCMIntentService 类中实现了 onRegistered 方法。 问题是我想将主要 Activity 中的
我正在我的应用程序中实现 GCM。我已按照 developer.android.com 的 GCM 教程中给出的所有步骤进行操作 我的应用程序的构建目标指向 Goolge API 8(Android
我的应用程序过去运行得非常好。最近我更新了 eclipse(插件),现在我收到了这个错误。我没有更改我的代码,所以我知道它应该继续工作。但事实并非如此。我正在使用 google eclipse 插件,
您好,我想从 GCMIntentService 发送数据到我的主要 Activity ,我想在那里接收它?我该如何实现? 我非常坚持这一点在我的主要 Activity 中,我有一个列表,我想根据收到的
我正在尝试从 GCMBaseIntentService 运行 AsyncTask,但是当我这样做时应用程序崩溃了。令人感动的是,我想使用 MainActivity 中的上下文来让我的 AsyncTas
我想在收到 GCM 通知时获取用户在 Android 中的位置。 所以在我的 GCMIntentService extends GCMBaseIntentService 中,我这样做了: @Ov
我已经在我的 android 应用程序中成功实现了用于推送通知的 GCM 框架。但是我对 Google 在 GcmIntentService 类中覆盖的功能有点困惑。 @Override protec
我是一名优秀的程序员,十分优秀!