我每半小时向我的Android应用发送一次C2DM更新,这会创建一个通知.问题是,当我早上醒来时,我在状态栏中排队了15个通知.
我如何只保留最新通知,覆盖以前的通知?
我试着查看C2DM文档(http://code.google.com/android/c2dm/),其中提到了一个名为collapse_key的参数,但我找不到如何使用它的解释,也不确定解决方案位于C2DM方面.
谢谢!
我使用C2DM,如果注册成功,它工作正常.但有时注册失败,然后尝试注册:
Intent retryIntent = new Intent(C2DM_RETRY);
PendingIntent retryPIntent = PendingIntent.getBroadcast(context,
0 /*requestCode*/, retryIntent, 0 /*flags*/);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.ELAPSED_REALTIME,
backoffTimeMs, retryPIntent);
Run Code Online (Sandbox Code Playgroud)
但是,如果警报管理器触发此意图该怎么办?我必须抓住它吗?因为某种程度上程序永远不会重新注册.
有谁知道是否有可能用C#创建一个c2dm服务器端?如何添加所需参数(电子邮件,密码等)?
这里的代码是一个普通的Java应用程序,而不是一个Android应用程序,它设计用于将带有YOUR_REGISTRATION_STRING的C2DM消息作为开发人员用auth_key发送,问题描述如下
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
public class C2DMSendMessage {
private final static String AUTH = "authentication";
private static final String UPDATE_CLIENT_AUTH = "Update-Client-Auth";
public static final String PARAM_REGISTRATION_ID = "registration_id";
public static final String PARAM_DELAY_WHILE_IDLE = "delay_while_idle";
public static final String PARAM_COLLAPSE_KEY = "collapse_key";
private static final String UTF8 = "UTF-8";
// Registration is currently hardcoded
private final static String YOUR_REGISTRATION_STRING = "APA91bGf8gkFMn_sBP_hosSAiqUmmLwOdIqVSQKbbqXv2WSADQ51gbixInAGUk1U_vDIcz7izVaq6tvu8KXGsiQ7BIKy_7f04id00SUms8h3YGxbsKd6Jjg";
public …
Run Code Online (Sandbox Code Playgroud) 我目前正在我的项目上实现推送通知功能.我设法使用xtify这样做,因为它是与Google的C2DM服务交互的好包装.
现在,正如大多数人可能知道的那样:xtify使用名为xid的标识符进行通信并将通知推送给用户.所以在我的主要活动中(用户打开应用程序时显示的第一个),我有以下代码:
XtifySDK.start(getApplicationContext(), Constants.XTIFY_APP_KEY,
Constants.C2DM_SENDER_ID);
String xid = XtifySDK.getXidKey(getApplicationContext());
if (!"".equals(xid) && xid != null) {
App.setXid(xid);
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:
我应该将它存储在数据库中(使用用户信息)吗?并在每次用户连接时检查他/她是否已经有相关的xid,如果没有,请致电
String xid = XtifySDK.getXidKey(getApplicationContext());
生成一个新的? - 有没有办法让Android模拟器获取通知?
先谢谢你们,
android push-notification android-emulator android-c2dm xtify
我成功地使这些c2dm实现在我的应用程序上工作.
当设备突然没有收到c2dm消息时,我遇到了问题.这次它给了我许可否认,我很困惑:
权限拒绝:接收Intent {
act = com.google.android.c2dm.intent.REGISTRATION cat = [myapp.android](有额外内容)}到myapp.android需要myapp.android.permission.C2D_MESSAGE,因为发件人com.google. android.location(uid 10037)
它第二次发生在我身上,我不能告诉我的用户他们在没有收到任何命令时需要执行恢复出厂设置.这里有没有人遇到类似的问题?任何帮助或见解和原因将不胜感激.
manifest.xml按要求
<receiver
android:name="myapp.EmBroadcastReceiver"
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="myapp" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
...
<uses-permission android:name="myapp.android.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.INTERNET" />
Run Code Online (Sandbox Code Playgroud)
我使用 GCM 制作了一个用于通知的应用程序。我使用了本教程,我的代码几乎相同
http://developer.android.com/google/gcm/client.html
我正在物理设备和某些设备上进行测试,当我尝试使用 GCM 注册设备时出现 SERVICE_NOT_AVAILABLE 错误。
我有一个指数退避设置,所以它会随着时间的推移重试。
它适用于我大约一半的测试设备,其他设备出现 SERVICE_NOT_AVAILABLE 错误。找遍了,还没找到解决办法。
任何帮助将不胜感激。谢谢你!
我正在尝试创建一个聊天应用程序.通信基于RESTful Web服务(Jersey).客户端与发送HTTP请求的服务器通信.我的问题是如何在没有客户端首先发送请求的情况下将消息从服务器发送到客户端.我读到了有关C2DM通知的信息,我想用这种方式,当客户端从服务器收到通知时(客户端)必须向服务器发送请求才能接收数据.我也在考虑使用套接字,但我不知道是否可以使用Rest.我的意思是在服务器端,我还可以使用REST代码的套接字(在较低级别运行的套接字)吗?我唯一可以使用套接字工作的是创建另一个带套接字的服务器(两个服务器RESTful和socket),但这是一个很好的解决方案吗?我也可以在客户端放置一些服务器代码,在服务器端放置一些客户端代码.这是正确有效的吗?你怎么看?哪种解决方案最好?