Articles of google cloud messaging

发送一个通知后未注册的令牌错误

我在使用Firebase时遇到了Android应用程序的这个戏剧性问题。 1.我的应用程序在第一次启动时收到令牌2.我能够从firebase控制台向注册令牌发送通知3.如果我尝试在步骤2之后再次使用控制台发送通知。它向我显示“未注册令牌”在第二次尝试之后。 我已经在清单中有所有必要的配置,google service.json文件也已正确配置。 我相信事情是正确的,因为应用程序能够接收一次通知,问题才会在此之后开始。 更新1:如果我卸载应用程序并重新安装它,那么我也只能收到一次通知。 那些想要查看代码的人,这就是我获取令牌的方式: @Override public void onTokenRefresh() { //Getting registration token refreshedToken = FirebaseInstanceId.getInstance().getToken(); //Displaying token on logcat Log.d(TAG, “Refreshed token: ” + refreshedToken); saveDeviceToken(refreshedToken); } 这只能在第一次启动时调用,之后,我还没有看到它被调用(我认为这是预期的行为)。 收到的OnMessage也会在第一次通知时被调用,然后它永远不会被取消: @Override public void onMessageReceived(RemoteMessage remoteMessage) { Log.d(“FCM”, “From: ” + remoteMessage.getFrom()); if (remoteMessage.getNotification() != null) { Log.d(“FCM”, “Notification Message Body: ” + remoteMessage.getNotification().getBody()); […]

SecurityException:不允许启动服务Intent act = com.google.android.c2dm.intent.REGISTER

我得到错误SecurityException: Not allowed to start service Intent但看起来在搜索许多主题后它没有很好的解决方案。 请帮帮我, 谢谢, p / s: 我确保使用了正确的SENDER_ID因为项目编号是在Google API Console定义的,并且正确的package name 。 错误: Caused by: java.lang.SecurityException: Not allowed to start service Intent { act=com.google.android.c2dm.intent.REGISTER pkg=com.google.android.gms (has extras) } without permission com.google.android.c2dm.permission.RECEIVE at android.app.ContextImpl.startServiceAsUser(ContextImpl.java:1785) at android.app.ContextImpl.startService(ContextImpl.java:1757) at android.content.ContextWrapper.startService(ContextWrapper.java:480) at com.google.android.gms.gcm.GoogleCloudMessaging.e(Unknown Source) at com.google.android.gms.gcm.GoogleCloudMessaging.register(Unknown Source) at controller.RegisterGCMClientAsync.doInBackground(RegisterGCMClientAsync.java:62) at controller.RegisterGCMClientAsync.doInBackground(RegisterGCMClientAsync.java:18) at android.os.AsyncTask$2.call(AsyncTask.java:287) at […]

Android Parse Push通知设备只在一台设备上注册一次

每个人都在我的应用程序中使用解析服务进行推送通知。 但是当我在一台设备上重新安装应用程序时,它会一直注册。然后问题是,一台设备会在每台设备上收到多个通知。 我已经完成了一些注册代码,如下所示。 请帮助我,提前谢谢。 Parse.initialize(this, PARSE_APP_ID, PARSE_CLIENT_KEY); ParseACL defaultACL = new ParseACL(); defaultACL.setPublicReadAccess(true); ParseACL.setDefaultACL(defaultACL, true); PushService.setDefaultPushCallback(this, MainActivity.class); ParseInstallation.getCurrentInstallation().getInstallationId(); ParseInstallation.getCurrentInstallation().saveInBackground(); 并订阅: PushService.subscribe(this, userName, Detail.class); 在清单中 以上 在应用标签中: 每次我安装时,都会显示错误,如下所示。 03-10 12:18:48.555: E/ParseCommandCache(12709): Failed to run command. 03-10 12:18:48.555: E/ParseCommandCache(12709): com.parse.ParseException: at least one ID field (installationId,deviceToken) must be specified in this operation 03-10 12:18:48.555: E/ParseCommandCache(12709): at com.parse.ParseCommand$3.then(ParseCommand.java:348) […]

如何使用FCM向特定用户发送通知?

我为FCM准备了接收器,可以向所有设备发送通知。 带有此链接的gcm-http.googleapis.com/gcm/send可以发送给已注册的目标用户并将其发布到目标设备,如下面的json: { “notification”: { “title”: “sample Title”, “text”: “sample text” }, “to” : “[registration id]” } 但是,我需要通过电子邮件或姓名等向我选择的目标用户发送通知。 例如: { “notification”: { “title”: “sample Title”, “text”: “sample text” }, “to” : “[email or name or sex …]” } 我怎样才能做到这一点? 我是否需要创建Web服务器或其他东西?

我们如何获得Android的设备令牌以进行推送通知?

我想在我的应用程序中实现推送通知。我想知道,在启用谷歌云消息传递API后,我们如何在Android中获取推送通知的设备令牌。我们如何获得特定设备的设备令牌?

Android NotificationManager给我“无效小图标”错误

我和通知管理器有一个奇怪的错误。 @Override public void onMessageReceived(String from, Bundle data) { Log.i(TAG, “IP : ” + (String) data.get(“ip”)); NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); Intent acceptNextIntent = new Intent(MainActivity.BROADCAST_KEY_ACCEPT); // acceptNextIntent.putExtra(“ip”, (String) data.get(“blah”)); //add stuff here PendingIntent acceptNextPendingIntent = PendingIntent.getBroadcast(this, 0, acceptNextIntent, 0); Intent declineNextIntent = new Intent(MainActivity.BROADCAST_KEY_DECLINE); PendingIntent declineNextPendingIntent = PendingIntent.getBroadcast(this, 0, declineNextIntent, 0); NotificationCompat.Action acceptAction = […]

Google Firebase下游消息的http发布请求的“授权”部分是什么?

我想尝试使用谷歌的FCM消息服务发送消息,正如文档所述,http请求应该是这样的: https://fcm.googleapis.com/fcm/send Content-Type:application/json Authorization:key=AIzaSyZ-1u…0GBYzPu7Udno5aA { “data”: { “score”: “5×1”, “time”: “15:10” }, “to” : “bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1…” } 我的问题是我不知道Authorization的价值应该是什么,当我删除这个标题并发出请求时,我得到错误401:Unauthorized 。我认为这必须是某种api密钥或者其他东西但我找不到它在我的项目中。 谁能帮我? PS:出于测试目的,我目前正在使用此站点向我的设备发送消息

在库中实现Firebase

我想在我想在许多应用程序中用作SDK的库中实现Friebase通知系统。 Firebase现在要求提供应用程序ID,但我在库中实现它,因此没有应用程序ID。 我怎样才能实现能够向使用我的图书馆的应用程序发送通知的目标? 提前致谢。

间歇性401未经Google GCM授权

我们正在从Google的GCM服务中获得间歇性的401未经授权的错误。 在过去,它100%的时间都在工作。 问题可能与我们的路由器接受IPv6流量一致,但即使我们在适配器上禁用IPv6,问题仍然存在。 它也不适用于单独的IPv4网络。 我们还使用Google建议的指数退避( http://developer.android.com/google/gcm/adv.html#retry )重试我们的请求,因此问题可能会随着时间的推移而发展,我们可能没有注意到。 我们测试的所有生产IPv4和IPv6地址都列在我们的项目中: https : //console.developers.google.com 以下是我们的密钥的样子,我们已将整个可公开访问的子网列入测试,但我也尝试过使用单个IP地址。 有时它有效: C:\Users\Administrator>curl –header “Authorization: key=REDACTED” –header Content-Type:”application/json” https://android.googl eapis.com/gcm/send -d “{\”registration_ids\”:[\”test\”],\”data\”:{\”code\”:123} }” -k {“multicast_id”:REDACTED,”success”:0,”failure”:1,”canonical_ids”:0,”r esults”:[{“error”:”InvalidRegistration”}]} 但是,有时我们得到这样的回应: C:\Users\Administrator>curl –header “Authorization: key=REDACTED” –header Content-Type:”application/json” https://android.googl eapis.com/gcm/send -d “{\”registration_ids\”:[\”test\”],\”data\”:{\”code\”:123} }” -k Unauthorized Unauthorized Error 401 次要更新(2014年4月4日) 将设置更改为“允许任何IP”可以解决问题,但更改为任何其他IP地址会再次破坏它。

无法使用XMPPHP库在我的应用服务器和GCM的CCS之间建立xmpp连接

像推送通知(下游消息),我想在我的Android设备上实现上传消息到php中的我的应用服务器。 我正在使用Github的这个XMPPHP库将我的应用服务器连接到GCM的CCS。 但是当我尝试执行以下代码来连接GCM的CCS时: include ‘XMPPHP/XMPP.php’; $conn = new XMPPHP_XMPP(‘gcm-preprod.googleapis.com’, 5236, ‘@gcm.googleapis.com’, ”, ‘xmpphp’, ‘http://myserverdomain’, $printlog=true, $loglevel=XMPPHP_Log::LEVEL_INFO); $conn->autoSubscribe(); $vcard_request = array(); try { $conn->connect(); … 我收到了以下错误。 1455354076 [INFO]: Connecting to tls://gcm-preprod.googleapis.com:5236 1455354106 [ERROR]: Could not connect. Could not connect before timeout.