php 禁用通知,推送消息能不能区分禁止通知和卸载两种类型?

消息推送ios用了apns,android用的是gcm。推送失败都会返回无效的token,但是无效的tokne中,能不能区分到哪些是禁止通知,哪些是卸载app导致的呢?

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等于8if ($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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394956.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IOS13图标尺寸_更新iOS13后,我的5台iPhone都废了

苹果就是自带热搜体质&#xff0c;特别是在九月。机哥大概数了一下&#xff0c;光是线下发售后的这四天&#xff0c;iPhone 11 前前后后就上了 7 次热搜。今天这一次热搜&#xff0c;是因为库克之前发了一条微博&#xff0c;夸自家 iPhone 11 是有史以来最出色的一款。在这条微…

Android 如何调用系统默认浏览器访问

// 调用系统默认浏览器// 参考&#xff1a;// http://www.cnblogs.com/zhwl/archive/2011/11/15/2249848.html// https://segmentfault.com/a/1190000003912694case R.id.tv_about_weibo: // 关于微博// 直接打开 // Intent intent new Intent(); // …

kotlin函数式编程_我最喜欢的Kotlin函数式编程示例

kotlin函数式编程by Marcin Moskala通过Marcin Moskala One of the great things about Kotlin is that it supports functional programming. Let’s see and discuss some simple but expressive functions written in Kotlin.Kotlin的一大优点是它支持函数式编程。 让我们看…

数据库收缩

1.选中数据库-任务-收缩-数据库 2.全部压缩 3.右键数据库&#xff0c;属性 4.找到自动收缩&#xff0c;设置为true 转载于:https://www.cnblogs.com/RogerLu/p/10469819.html

matlab自带kfcm函数,kfcmFun.m

function [center, U, obj_fcn] kfcmFun(data, cluster_n,maxit, kernel_b,expo)data_n size(data, 1); % 求出data的第一维(rows)数,即样本个数obj_fcn zeros(100, 1);% 初始化输出参数obj_fcnU initkfcm(cluster_n, data_n);% 初始化模糊分配矩阵,使U满足列上相加为1inde…

flink sql udf jar包_Flink 生态:一个案例快速上手 PyFlink

简介&#xff1a; Flink 从 1.9.0 版本开始增加了对 Python 的支持&#xff08;PyFlink&#xff09;&#xff0c;在刚刚发布的 Flink 1.10 中&#xff0c;PyFlink 添加了对 Python UDFs 的支持&#xff0c;现在可以在 Table API/SQL 中注册并使用自定义函数。PyFlink 的架构如何…

赛思互动:为什么越来越多的企业愿意接受SaaS服务?

SaaS是Software-as-a-Service&#xff08;软件即服务&#xff09;的简称&#xff0c;随着互联网技术的发展和应用软件的成熟&#xff0c; 在21世纪开始兴起的一种完全创新的软件应用模式。SaaS 应用软件的价格通常为“全包”费用&#xff0c;囊括了通常的应用软件许可证费、软件…

使用Google Cloud Platform分散您的应用程序

by Simeon Kostadinov通过Simeon Kostadinov 使用Google Cloud Platform分散您的应用程序 (Decentralize your application with Google Cloud Platform) When first starting a new software project, you normally choose a certain programming language, a specific frame…

pta通讯录排序用python实现,python实现将android手机通讯录vcf文件转化为csv

经常会遇到将手机通讯录导出到电脑并转化为在电脑中可编辑的情况&#xff0c;在网上搜索了很久当前不外乎两种处理方式。1.使用电脑的outlook的通讯簿功能&#xff0c;将手机导出的vcf文件导入到outlook的通讯录中&#xff0c;然后再导出为可编辑文件&#xff1b;2.是使用专用软…

从物联网发展历程看区块链挑战

2009年&#xff0c;中本聪发布了第一个比特币节点&#xff0c;五年后区块链俨然成为一个规模巨大的产业。 虽然看起来&#xff0c;基于区块链的新的商业时代距离我们似乎只有一步之遥&#xff0c;但在2016年&#xff0c;我们已经意识到区块链产业不会那么快获得成功。 早期的新…

编程软件python是什么意思_程序员Python编程必备5大工具,你用过几个?

Python是编程入门不错的选择&#xff0c;现在也有不少的程序员业余时间会研究这门编程语言。 学习Python有时候没有第一时间找到好工具&#xff0c;会吃不少的苦头。毕竟好的工具能将工作效率多倍速提升。下面W3Cschool给小伙伴们推荐Python编程必备的5大工具&#xff1a; 0、I…

Linux ReviewBoard安装与配置

目录 0. 引言1. 安装步骤2. 配置站点 2.1 创建数据库2.2 开始安装2.3 修改文件访问权限2.4 Web服务器配置2.5 修改django相关配置正文 回到顶部0. 引言 环境&#xff1a;Ubuntu 14.04 Server&#xff08;虚拟机&#xff09; 这篇文章里说的是review board官方的安装方式&#x…

小程序 graphql_GraphQL应用程序中的五个常见问题(以及如何解决)

小程序 graphqlby Sacha Greif由Sacha Greif GraphQL应用程序中的五个常见问题(以及如何解决) (Five Common Problems in GraphQL Apps (And How to Fix Them)) 了解如何释放GraphQL的强大功能而不会遭受缺点 (Learn to unlock the power of GraphQL without suffering its dr…

又拍云 php5月18号那,又拍云文档中心

移动流量平台概述又拍云手机流量营销平台&#xff0c;整合移动、电信、联通三大运营商流量资源&#xff0c;将强大的流量营销服务&#xff0c;通过接口等形式提供给商家合作伙伴&#xff0c;帮助商家开展品牌宣传、APP/游戏/微信公众号/网站的拉新与促活等多种营销活动。通过接…

SQL SERVER2000将多行查询结果拼接到一行数据及函数的创建

处理前的查询结果如上图&#xff1a; 通过借助SQL变量的定义 DECLARE Scope varchar(1000) DECLARE Num int SET Scope SET Num 1 SELECT ScopeScopeconvert(varchar(8),Num)、DescScope DescOper;, Num Num1 From fuel_contractQualityNew Where ContractID0120090001…

kindeditor简单使用

先引入&#xff1a; <script src"/static/jquery-3.3.1.min.js"></script><script src"/static/kindeditor-4.1.11-zh-CN/kindeditor/kindeditor-all.js"></script> 基本使用参数&#xff1a; $(function () {KindEditor.create(#…

windows nginx c++读取请求数据_轻松应对百万并发的Nginx,搞懂LinuxC/C++这些技术栈升职加薪...

在深入了解 Nginx 各种原理及在极端场景下的一些错误场景处理时&#xff0c;需要首先理解什么是网络事件。Nginx 是一个事件驱动的框架&#xff0c;所谓事件主要指的是网络事件&#xff0c;Nginx 每个网络连接会对应两个网络事件&#xff0c;一个读事件一个写事件。在深入了解 …

github 6月开源项目_我的开源项目如何在短短5天内在GitHub上赢得6,000颗星

github 6月开源项目Last month I launched two open source projects on GitHub. A few days later, my Front-End Checklist was showing more than 6,000 stars (17,000 as of writing). And I got 600 stars for my Resources-Front-End-Beginner project!上个月&#xff0c…

如何成为一位牛逼的高手

郑昀 演讲稿 创建于2016/9/15 最后更新于2016/9/21 很多人都在思考一个问题&#xff1a; 怎样才能想出来一个牛逼的 idea&#xff1f; 有一位喜欢抽烟喝酒烫头的大师 给出了答案&#xff1a; 这事儿吧&#xff0c;简单&#xff0c;一共分两步。 第一步先让自己成为一个牛逼的人…

thinkphp html php文件,ThinkPHP生成静态HTML文件

View.class.php/*** 加载模板和页面输出 可以返回输出内容* access public* param string $templateFile 模板文件名* param string $charset 模板输出字符集* param string $contentType 输出类型* param string $content 模板输出内容* param string $prefix 模板缓存前缀* r…