- 浏览: 1078229 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (290)
- php (65)
- javascript (36)
- html5 (31)
- thinkphp (9)
- mysql (16)
- jquery (13)
- node.js (9)
- css (9)
- android 开发 (8)
- flex (5)
- java (3)
- apache (8)
- linux (8)
- git (5)
- web (5)
- wordpress (9)
- mongodb (2)
- redis (5)
- yaf (6)
- python (4)
- big data (1)
- sphinx (1)
- html (1)
- bootstrap (1)
- vue (1)
- laravel (1)
- test (0)
最新评论
-
July01:
推荐用StratoIO打印控件,支持网页、URL、图片、PD、 ...
如何解决非IE浏览器的web打印 -
flashbehappy:
同一个视频,有mp4,ogg两种格式的。在chrome,fir ...
firefox chrom safari 对video标签的区别 -
xmdxzyf:
可以在网站(www.sosoapi.com)上试下在线表单方式 ...
用swagger-php/ui做API测试 -
flex_莫冲:
a2631500 写道"看了源码,设置Backbon ...
backbone与php交互 -
a2631500:
"看了源码,设置Backbone.emulateJS ...
backbone与php交互
消息推送ios用了apns,android用的是gcm。推送失败都会返回无效的token,但是无效的tokne中,能不能区分到哪些是禁止通知,哪些是卸载app导致的呢?
1 APNS PHP 的推送返回错误处理
Push.php
通过禁止通知,apns不会报错,不会将这个token当成无效或错误的token。
卸载app,会调用到以下判断,statusCode等于8
因此,apns应该是可以区分卸载导致的推送失败,但是禁止通知则无法反应
2 GCM的错误判断代码分析:
Response.class.php
如果禁止通知,上述2个方法都不会写入错误token,也就是说禁止通知,token也是有效的,且不会返回错误。
如果是卸载app,则会执行到getInvalidRegistrationIds,且$result['error']==NotRegistered
这样,GCM如果返回的是NotRegistered,则说明是卸载产生的错误信息,而禁止通知,GCM是当成正常token发出去的。
通过以上测试,说明apns和gcm对禁止通知都是当成正常token来处理的,而卸载app则会当成无效的token。(卸载后重装的话,会生成新的token)
1 APNS PHP 的推送返回错误处理
Push.php
if (!empty($aMessage['ERRORS'])) { foreach($aMessage['ERRORS'] as $aError) { if ($aError['statusCode'] == 0) { $this->_log("INFO: Message ID {$k} {$sCustomIdentifier} has no error ({$aError['statusCode']}), removing from queue..."); $this->_removeMessageFromQueue($k); continue 2; } else if ($aError['statusCode'] > 1 && $aError['statusCode'] <= 8) { $this->_log("WARNING: Message ID {$k} {$sCustomIdentifier} has an unrecoverable error ({$aError['statusCode']}), removing from queue without retrying..."); $this->_removeMessageFromQueue($k, true); continue 2; } } if (($nErrors = count($aMessage['ERRORS'])) >= $this->_nSendRetryTimes) { $this->_log( "WARNING: Message ID {$k} {$sCustomIdentifier} has {$nErrors} errors, removing from queue..." ); $this->_removeMessageFromQueue($k, true); continue; } }
通过禁止通知,apns不会报错,不会将这个token当成无效或错误的token。
卸载app,会调用到以下判断,statusCode等于8
if ($aError['statusCode'] > 1 && $aError['statusCode'] <= 8) { $this->_log("WARNING: Message ID {$k} {$sCustomIdentifier} has an unrecoverable error ({$aError['statusCode']}), removing from queue without retrying..."); $this->_removeMessageFromQueue($k, true); continue 2; }
因此,apns应该是可以区分卸载导致的推送失败,但是禁止通知则无法反应
2 GCM的错误判断代码分析:
Response.class.php
/** * Returns an array containing invalid registration ids * They must be removed from DB because the application was uninstalled from the device. * * @return array */ public function getInvalidRegistrationIds() { if ($this->getFailureCount() == 0) { return array(); } $filteredResults = array_filter($this->results, function($result) { return (isset($result['error']) && (($result['error'] == "NotRegistered") || ($result['error'] == "InvalidRegistration"))); }); return array_keys($filteredResults); } /** * Returns an array of registration ids for which you must resend a message (?), * cause devices aren't available now. * * @TODO: check if it be auto sended later * * @return array */ public function getUnavailableRegistrationIds() { if ($this->getFailureCount() == 0) { return array(); } $filteredResults = array_filter($this->results, function($result) { return ( isset($result['error']) && ($result['error'] == "Unavailable") ); }); return array_keys($filteredResults); }
如果禁止通知,上述2个方法都不会写入错误token,也就是说禁止通知,token也是有效的,且不会返回错误。
如果是卸载app,则会执行到getInvalidRegistrationIds,且$result['error']==NotRegistered
这样,GCM如果返回的是NotRegistered,则说明是卸载产生的错误信息,而禁止通知,GCM是当成正常token发出去的。
通过以上测试,说明apns和gcm对禁止通知都是当成正常token来处理的,而卸载app则会当成无效的token。(卸载后重装的话,会生成新的token)
发表评论
-
将博客搬至CSDN
2017-03-28 09:07 504将博客搬至CSDN,尽情期待 -
laravel入門
2017-03-03 16:31 5531 全局安裝 composer global require ... -
导出csv,excel等文件,文件内容错误的问题,需要加上ob_end_clean
2017-03-02 11:54 1468见这个问题: http://stackoverflow.com ... -
facebook graph api从2.6转到2.8的问题处理
2017-02-15 16:30 944之前一直用facebook 2.6的api,现在想升级到2.8 ... -
php从mysql读取超过200W行的表
2017-01-04 10:09 559需要从一个大表,如user表中读取所有user数据再做整理并導 ... -
一个session失效的伪命题
2016-12-08 18:33 663最近遇到一个问题,一个ajax请求会调用已存在的session ... -
tp5与tp3的区别
2016-11-21 14:33 1483TP5作了很大的改变,更加灵活,没那么臃肿了,加入了一些令人振 ... -
yaf在命令行模式下出现PHP Fatal error: Class 'Yaf_Application' not found的解决办法
2016-11-11 16:42 2315为了跑个yaf的crontab,执行时报错: PHP Fata ... -
推送emoji表情乱码的解决方法
2016-11-04 17:44 1892推送内容如果包含了emoji表情,需要做以下修改 1 mysq ... -
YAF访问图片等静态资源禁止调用YAF框架的解决办法
2016-10-20 17:55 1575当访问yafpublic 目录下的某个静态资源时,依然会访问y ... -
在线自动协同编辑文本的实现方案
2016-10-14 16:49 1917要实现可以自动在线协同编辑文本的功能。就类似google do ... -
Paypal支付跳转失败的原因及解决办法
2016-09-18 14:27 3519遇到在跳转到paypal支付页面的时候出现502 bad ga ... -
文件格式不是unix导致sed,cat等读取文件后无法正常退出
2016-08-30 14:44 714#!/bin/bash bucket_config=&quo ... -
varnish的使用和PHP清除缓存的技巧
2016-08-11 14:10 1227官網地址 https://www.varnish-cache. ... -
TP在APP_DEBUG=false的情況下,CLI和WEBSITE會共用同一個~runtime.php導致出錯的問題解決辦法
2015-12-14 11:43 783TP若使用了 define('APP_DEBU ... -
node.js获取php curl post数据req.body为空的处理
2015-09-22 11:43 3887node使用了express4和body-parser来解析p ... -
yaf namespace的使用
2015-08-27 11:32 2254yaf支持namespace。在php.ini 中添加 yaf ... -
yaf 添加phpunittest
2015-08-21 11:16 574首先要讓php在cli下支持yaf wamp下打開D:/wam ... -
thinkphp socket to support sso (php socket 不稳定,不建议使用)
2015-08-18 14:06 1938cli code #!/bin/bash filep ... -
TP的module支持中文
2015-05-20 14:06 1203為了讓URL支持中文,例如www.xxx.com/廣州/xx ...
相关推荐
Android实例源码-消息推送通知栏类安卓源代码(5例) NotificationTest 消息推送的简单demo 实现Notification的通知栏常驻 消息推送完美demo 消息推送最新demo +服务器 激光推送客户端demo
问题的提出 本次接入的是个推,其他...App在前台时,弹出Dialog提醒用户有新消息,但是最新版的个推文档接收推送消息是继承IntentService,无法获取弹出Dialog所需要的Context(注意不能用getApplicationContext()),
模版消息推送是微信小程序采用的通知形式,用户本人在小程序页面有交互行为后,可触发下发通知,通过微信聊天列表中的服务通知可快捷进入查看消息。此外,点击查看详情还能跳转到下发消息的小程序的指定页面。但是为...
小米推送之消息推送官方Demo,有Eclipse和android studio两种版本
极光推送,使得开发者可以即时地向其应用程序的用户推送通知或者消息,与用户保持互动,从而有效地提高留存率,提升用户体验。平台提供整合了Android推送、iOS推送的统一推送服务。 产品特点 多种推送方式 Push ...
小米推送之消息推送官方Demo,有Eclipse和android studio两种版本.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
dotnet-DotNETCore实现微信公众号被关注时推送消息dotnet-DotNETCore实现微信公众号被关注时推送消息dotnet-DotNETCore实现微信公众号被关注时推送消息dotnet-DotNETCore实现微信公众号被关注时推送消息dotnet-...
钉钉推送消息源码 oa类型消息 推送到个人
Android中集成极光推送实现推送消息通知与根据别名指定推送示例代码.rar Android中集成极光推送实现推送消息通知与根据别名指定推送示例代码.rar Android中集成极光推送实现推送消息通知与根据别名指定推送示例代码....
消息推送,轮询,消息通知
该资源使用了2个第三方的推送平台来实现推送功能、可根据需要添加更多的第三方平台,封装到推送通知消息管理类中,方便地供应用使用。 该demo可供开发者学习信鸽推送、友盟推送的使用,也可将代码应用于自己的项目中...
各种消息推送的demo,如果不全,请发个demo给我,谢谢
关于unipush推送消息,手机端接收消息并且展示通知栏的服务端代码资源。 适用于App消息推送,支持在线离线推送消息。适用场景多元化(只需要用户登录App时进行用户信息和手机设备id绑定的处理) 首先要引入unipush的...
Android 中实现消息推送机制是指在 Android 应用程序中,通过后台服务实现消息推送功能,以便在应用程序不在前台运行的情况下,仍然能够及时地将重要信息推送给用户。下面是实现 Android 消息推送机制的关键知识点:...
Android 实现XMP协议,基于 mqtt 消息推送通知指南
Android百度云推送,通过百度云推送的SDK和下载的demo实现一个简单的消息推送.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
推送消息测试用例.xlsx
这些文件详细展示了如何使用Java、Shell和Lua构建一个功能强大的消息推送平台,支持多种消息类型如邮件、短信、微信服务号、微信小程序、企业微信和钉钉等。这些文件非常适合用于学习和参考Java项目的开发。
实现 SQL SERVER 数据库中的微信推送功能,可以将一些报警消息发送到微信讨论组或者微信订阅号、公众号、服务号,需要有认证的微信订阅号或者微信服务号
APNS(Apple Push Notification Service)苹果推送通知服务。该技术由苹果公司提供的APNS服务。工作原理:首先,APNS会对用户进行物理连接认证,和设备令牌认证(简言之就是苹果的服务器检查设备里的证书已确定其为...