- 浏览: 1090216 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (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 632将博客搬至CSDN,尽情期待 -
laravel入門
2017-03-03 16:31 6461 全局安裝 composer global require ... -
导出csv,excel等文件,文件内容错误的问题,需要加上ob_end_clean
2017-03-02 11:54 1555见这个问题: http://stackoverflow.com ... -
facebook graph api从2.6转到2.8的问题处理
2017-02-15 16:30 1141之前一直用facebook 2.6的api,现在想升级到2.8 ... -
php从mysql读取超过200W行的表
2017-01-04 10:09 645需要从一个大表,如user表中读取所有user数据再做整理并導 ... -
一个session失效的伪命题
2016-12-08 18:33 740最近遇到一个问题,一个ajax请求会调用已存在的session ... -
tp5与tp3的区别
2016-11-21 14:33 1547TP5作了很大的改变,更加灵活,没那么臃肿了,加入了一些令人振 ... -
yaf在命令行模式下出现PHP Fatal error: Class 'Yaf_Application' not found的解决办法
2016-11-11 16:42 2402为了跑个yaf的crontab,执行时报错: PHP Fata ... -
推送emoji表情乱码的解决方法
2016-11-04 17:44 1969推送内容如果包含了emoji表情,需要做以下修改 1 mysq ... -
YAF访问图片等静态资源禁止调用YAF框架的解决办法
2016-10-20 17:55 1623当访问yafpublic 目录下的某个静态资源时,依然会访问y ... -
在线自动协同编辑文本的实现方案
2016-10-14 16:49 1978要实现可以自动在线协同编辑文本的功能。就类似google do ... -
Paypal支付跳转失败的原因及解决办法
2016-09-18 14:27 3618遇到在跳转到paypal支付页面的时候出现502 bad ga ... -
文件格式不是unix导致sed,cat等读取文件后无法正常退出
2016-08-30 14:44 775#!/bin/bash bucket_config=&quo ... -
varnish的使用和PHP清除缓存的技巧
2016-08-11 14:10 1288官網地址 https://www.varnish-cache. ... -
TP在APP_DEBUG=false的情況下,CLI和WEBSITE會共用同一個~runtime.php導致出錯的問題解決辦法
2015-12-14 11:43 841TP若使用了 define('APP_DEBU ... -
node.js获取php curl post数据req.body为空的处理
2015-09-22 11:43 3965node使用了express4和body-parser来解析p ... -
yaf namespace的使用
2015-08-27 11:32 2318yaf支持namespace。在php.ini 中添加 yaf ... -
yaf 添加phpunittest
2015-08-21 11:16 635首先要讓php在cli下支持yaf wamp下打開D:/wam ... -
thinkphp socket to support sso (php socket 不稳定,不建议使用)
2015-08-18 14:06 2010cli code #!/bin/bash filep ... -
TP的module支持中文
2015-05-20 14:06 1275為了讓URL支持中文,例如www.xxx.com/廣州/xx ...
相关推荐
6. **消息分类处理**:小米推送支持透传消息和通知消息,开发者可以根据需求选择发送类型,透传消息通常用于应用内部逻辑,通知消息则会在通知栏展示。 7. **事件监听**:除了消息接收,还可以监听其他事件,如点击...
小米推送是一种针对Android应用开发者的消息推送服务,它可以帮助开发者实现向用户设备实时发送消息的功能,提高用户活跃度和应用粘性。小米推送提供了一系列API和SDK,方便开发者集成到自己的应用中。在这个"小米推...
综上所述,消息推送、轮询和消息通知是现代互联网应用中不可或缺的技术,它们共同构建了高效、实时的用户交互体验。开发者需要根据具体业务需求和用户行为,合理选择和组合这些技术,以实现最优的系统性能和用户体验...
- FCM提供了两种类型的消息:通知消息和数据消息。通知消息由FCM客户端库自动处理并显示在通知栏,而数据消息则由应用处理。 2. **创建通知** - 在Android中,`Notification`类用于创建和管理通知。`...
2. **构建推送消息**:推送消息包含头信息(如设备Token、通知类型、优先级等)和负载数据(如标题、正文、声音等)。JSON格式通常用于构造推送消息。 3. **连接到APNs服务器**:使用像`apns.class.php`这样的库...
首先,我们需要理解“消息推送通知栏”这一概念,它是指应用接收到服务器推送的消息后,在用户设备的通知栏显示提醒,用户可以通过点击通知来进入应用或执行相应的操作。 百度云推送(Baidu Cloud Push)是百度提供...
本资源“安卓消息推送通知栏相关-Android--第三方消息推送腾讯信鸽.rar”主要涉及的是如何利用腾讯信鸽这个第三方服务来实现Android应用的消息推送功能。下面我们将详细介绍腾讯信鸽的基本概念、工作原理以及如何在...
开发者可以借此服务向用户推送通知,提高用户的留存率和活跃度。 2. **集成步骤** 集成信鸽推送服务通常包括以下几个步骤: - **添加依赖**:在项目的build.gradle文件中,添加信鸽推送的SDK依赖。 - **初始化...
泛微Ecology9.0第三方系统消息推送接口调用文档是泛微Ecology9.0平台提供的一种消息推送机制,旨在帮助第三方系统与Ecology9.0平台集成,实现消息的实时推送和处理。本文档将详细介绍泛微Ecology9.0第三方系统消息推...
Android实例源码-消息推送通知栏类安卓源代码(5例) NotificationTest 消息推送的简单demo 实现Notification的通知栏常驻 消息推送完美demo 消息推送最新demo +服务器 激光推送客户端demo
友盟消息推送是一款广泛应用于移动应用开发中的服务,它提供了高效、稳定的消息推送能力,帮助开发者与用户保持实时互动,提升用户活跃度和应用黏性。这个压缩包包含了友盟消息推送服务的全部源码,使得开发者可以...
Android 基于 MQTT 消息推送通知指南 Android 消息推送通知是 Android 应用程序中的一项重要功能,它允许服务器向手机客户端发送实时的通知消息。然而,实现 Android 消息推送通知远比 iPhone 上的推送通知解决方案...
5. **处理通知**:FCM有两种消息类型:通知消息和数据消息。通知消息会在系统托盘自动显示,而数据消息需要在`onMessageReceived()`中手动处理。如果需要自定义通知的显示方式,应尽量使用数据消息。 6. **发送消息...
问题的提出 本次接入的是个推,其他...App在前台时,弹出Dialog提醒用户有新消息,但是最新版的个推文档接收推送消息是继承IntentService,无法获取弹出Dialog所需要的Context(注意不能用getApplicationContext()),
iOS系统的推送通知服务分为两种:远程通知(Remote Notification)和本地通知(Local Notification)。远程通知是由服务器端发送到客户端的通知,而本地通知是由应用本身在本地触发的通知。友盟推送主要提供的是远程...
在Java开发中,集成华为推送服务是为应用提供消息推送功能的重要步骤,这可以提高用户互动性和应用的活跃度。本篇文章将详细讲解如何在服务端实现华为推送服务的集成,以及如何发送推送消息,同时关注数字角标的自动...
5. **推送类型**:通常有两种类型的推送通知:显示通知(显示在设备的通知中心)和后台通知(不显示通知,但可以在后台执行任务,如下载数据)。开发者需要根据应用场景选择合适的类型。 6. **推送策略**:推送策略...
模版消息推送是微信小程序采用的通知形式,用户本人在小程序页面有交互行为后,可触发下发通知,通过微信聊天列表中的服务通知可快捷进入查看消息。此外,点击查看详情还能跳转到下发消息的小程序的指定页面。但是为...
在Android应用开发中,消息推送是一项关键功能,它能让用户即使在不打开应用的情况下也能收到新消息的通知。这里我们关注的焦点是“Android消息推送源码”,这通常涉及到后台服务、通知栏通知以及Intent的使用等方面...
- 消息处理模块:接收到推送后,根据消息类型和内容进行相应的处理,比如显示通知、更新UI等。 - 网络连接管理:保持与服务器的连接,处理网络断开、重连的情况。 在实际开发中,还需要考虑以下几个关键点: - ...