`
flex_莫冲
  • 浏览: 1084979 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

    博客分类:
  • 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等于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)
分享到:
评论

相关推荐

    安卓消息推送通知栏相关-小米推送之消息推送官方Demo有Eclipse和androidstudio两种版本.rar

    6. **消息分类处理**:小米推送支持透传消息和通知消息,开发者可以根据需求选择发送类型,透传消息通常用于应用内部逻辑,通知消息则会在通知栏展示。 7. **事件监听**:除了消息接收,还可以监听其他事件,如点击...

    小米推送之消息推送的Demo

    小米推送是一种针对Android应用开发者的消息推送服务,它可以帮助开发者实现向用户设备实时发送消息的功能,提高用户活跃度和应用粘性。小米推送提供了一系列API和SDK,方便开发者集成到自己的应用中。在这个"小米推...

    消息推送,轮询,消息通知

    综上所述,消息推送、轮询和消息通知是现代互联网应用中不可或缺的技术,它们共同构建了高效、实时的用户交互体验。开发者需要根据具体业务需求和用户行为,合理选择和组合这些技术,以实现最优的系统性能和用户体验...

    关于IOS_APNS推送消息(iphone端+服务端)

    2. **构建推送消息**:推送消息包含头信息(如设备Token、通知类型、优先级等)和负载数据(如标题、正文、声音等)。JSON格式通常用于构造推送消息。 3. **连接到APNs服务器**:使用像`apns.class.php`这样的库...

    安卓消息推送通知栏相关-Android百度云推送通过百度云推送的SDK和下载的demo实现一个简单的消息推送.rar

    首先,我们需要理解“消息推送通知栏”这一概念,它是指应用接收到服务器推送的消息后,在用户设备的通知栏显示提醒,用户可以通过点击通知来进入应用或执行相应的操作。 百度云推送(Baidu Cloud Push)是百度提供...

    安卓消息推送通知栏相关-Android--第三方消息推送腾讯信鸽.rar

    本资源“安卓消息推送通知栏相关-Android--第三方消息推送腾讯信鸽.rar”主要涉及的是如何利用腾讯信鸽这个第三方服务来实现Android应用的消息推送功能。下面我们将详细介绍腾讯信鸽的基本概念、工作原理以及如何在...

    Android实例源码-消息推送通知栏类安卓源代码(5例).zip

    Android实例源码-消息推送通知栏类安卓源代码(5例) NotificationTest 消息推送的简单demo 实现Notification的通知栏常驻 消息推送完美demo 消息推送最新demo +服务器 激光推送客户端demo

    泛微 ecology9.0 第三方系统消息推送接口调用文档 .docx

    泛微Ecology9.0第三方系统消息推送接口调用文档是泛微Ecology9.0平台提供的一种消息推送机制,旨在帮助第三方系统与Ecology9.0平台集成,实现消息的实时推送和处理。本文档将详细介绍泛微Ecology9.0第三方系统消息推...

    友盟消息推送

    友盟消息推送是一款广泛应用于移动应用开发中的服务,它提供了高效、稳定的消息推送能力,帮助开发者与用户保持实时互动,提升用户活跃度和应用黏性。这个压缩包包含了友盟消息推送服务的全部源码,使得开发者可以...

    Android基于mqtt消息推送通知指南

    Android 基于 MQTT 消息推送通知指南 Android 消息推送通知是 Android 应用程序中的一项重要功能,它允许服务器向手机客户端发送实时的通知消息。然而,实现 Android 消息推送通知远比 iPhone 上的推送通知解决方案...

    Android 接收推送消息跳转到指定页面的方法

    问题的提出 本次接入的是个推,其他...App在前台时,弹出Dialog提醒用户有新消息,但是最新版的个推文档接收推送消息是继承IntentService,无法获取弹出Dialog所需要的Context(注意不能用getApplicationContext()),

    Andorid消息推送Demo

    5. **处理通知**:FCM有两种消息类型:通知消息和数据消息。通知消息会在系统托盘自动显示,而数据消息需要在`onMessageReceived()`中手动处理。如果需要自定义通知的显示方式,应尽量使用数据消息。 6. **发送消息...

    友盟推送配置教程iOS

    iOS系统的推送通知服务分为两种:远程通知(Remote Notification)和本地通知(Local Notification)。远程通知是由服务器端发送到客户端的通知,而本地通知是由应用本身在本地触发的通知。友盟推送主要提供的是远程...

    消息推送demo

    5. **推送类型**:通常有两种类型的推送通知:显示通知(显示在设备的通知中心)和后台通知(不显示通知,但可以在后台执行任务,如下载数据)。开发者需要根据应用场景选择合适的类型。 6. **推送策略**:推送策略...

    Android安卓应用源码-消息推送通知栏类源代码(5例).zip

    - FCM提供了两种类型的消息:通知消息和数据消息。通知消息由FCM客户端库自动处理并显示在通知栏,而数据消息则由应用处理。 2. **创建通知** - 在Android中,`Notification`类用于创建和管理通知。`...

    微信小程序模板消息还能群发?无限制推送?

    模版消息推送是微信小程序采用的通知形式,用户本人在小程序页面有交互行为后,可触发下发通知,通过微信聊天列表中的服务通知可快捷进入查看消息。此外,点击查看详情还能跳转到下发消息的小程序的指定页面。但是为...

    Java 集成华为推送服务 服务端(发送消息)

    在Java开发中,集成华为推送服务是为应用提供消息推送功能的重要步骤,这可以提高用户互动性和应用的活跃度。本篇文章将详细讲解如何在服务端实现华为推送服务的集成,以及如何发送推送消息,同时关注数字角标的自动...

    Android 消息推送源码

    在Android应用开发中,消息推送是一项关键功能,它能让用户即使在不打开应用的情况下也能收到新消息的通知。这里我们关注的焦点是“Android消息推送源码”,这通常涉及到后台服务、通知栏通知以及Intent的使用等方面...

    push(实现消息推送)

    - 消息处理模块:接收到推送后,根据消息类型和内容进行相应的处理,比如显示通知、更新UI等。 - 网络连接管理:保持与服务器的连接,处理网络断开、重连的情况。 在实际开发中,还需要考虑以下几个关键点: - ...

    信鸽推送Android端(Android信鸽推送demo)

    开发者可以借此服务向用户推送通知,提高用户的留存率和活跃度。 2. **集成步骤** 集成信鸽推送服务通常包括以下几个步骤: - **添加依赖**:在项目的build.gradle文件中,添加信鸽推送的SDK依赖。 - **初始化...

Global site tag (gtag.js) - Google Analytics