当前位置: 首页 > 知识库问答 >
问题:

消息推送处理

柯鸿云
2023-03-14

我正在网上阅读苹果的文档

处理本地和远程通知

在我看来,它有相互矛盾的说法。有人能澄清这些困惑吗?现在让我们严格地说一下远程通知(与本地通知相比)。

文档称,如果按下通知上的操作按钮,它将调用application:didfishlaunchingwithoptions并传递通知负载。之后,它会说,如果应用程序在前台运行,它会通过应用程序:DidReceiveMemoteNotify:发送通知。这对我来说意味着,当应用程序处于后台或未运行时,将调用application:didFinishLaunchingWithOptions。否则,将调用application:didReceiveMotonification:。

稍后,iOS会发布一条说明如下:

"iOS注意:在iOS中,您可以通过检查应用程序状态来确定某个应用程序是由于用户点击操作按钮而启动的,还是通知被传递给已经运行的应用程序。在委托者对应用程序的实现中:didReceiveRemteNotify:或Application: didReceiveLocalNotify:方法,获取Application ationState属性的值并对其进行评估。如果值为UIApplication ationStateInactive,则用户点击了操作按钮;如果值为UIApplication ationStateActive,则应用程序在收到通知时处于最前面。"

这对我来说意味着,应用程序:DidReceiveEmotentification:在应用程序已经前景化时调用,以及如果用户按下操作按钮(或在iOS 5中滑动操作滑块)以前景化/启动应用程序时调用。

我的困惑可能源于第一部分,其中文档暗示通知负载是随应用程序一起发送的:didFinishLaunchingWithOptions:method,或者是对“正在运行”的应用程序的误解(后台应用程序是否被视为“正在运行”?)。应用程序文档:DidReceiveMotonification:声明它被称为“运行”应用程序。

因此,总结一下,我可以得到以下方面的澄清:

1) 应用程序:DidReceiveEmotentification:在应用程序前景化或用户选择对通知“采取行动”时始终调用吗?如果不是,我们如何理解iOS关于确定应用程序处于活动或非活动状态的说明?

2) 后台应用程序是否“正在运行”,至少在文档声称应用程序的意义上是这样的:运行应用程序需要DidReceivereMotentification?

3)对于完成,背景应用程序UIApplication ationStateInactive还是Active?

共有2个答案

艾奕
2023-03-14

根据iOS9.1场景,我在终止模式下测试了消息推送,如果我点击消息推送,系统将首先调用,我的应用程序当时不在任何模式下运行,

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary *)userInfo{

//your code execution will here.

}

第二个方法调用将是,

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

//Your initial code execution.

}

我已经在应用程序中测试了这个场景。

舒嘉德
2023-03-14

这里的措辞令人困惑,尤其是围绕背景这个词。

当应用程序确实没有加载到内存中时(例如,当您启动它时会出现启动屏幕等),然后调用Application: didFinishLaunchingSusOptions,您可以获得如下消息推送:

NSDictionary *remoteNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

if(remoteNotif)
{
    //Handle remote notification
}

如果应用程序已加载到内存中且处于活动状态(例如,该应用程序当前在设备上处于打开状态),则仅调用application:DidReceiveEmotentification:

如果应用程序已加载到内存中,但未处于活动状态且未进行后台处理(例如,您启动了应用程序,然后按下home按钮并等待10秒钟),然后在推送通知中单击action按钮,则只会调用DidReceiveEmoteNotification。

您可以按如下方式捕获此案例:

-(void)application:(UIApplication *)app didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    if([app applicationState] == UIApplicationStateInactive)
    {
        //If the application state was inactive, this means the user pressed an action button
        // from a notification. 

    //Handle notification
    }
}
 类似资料:
  • 消息推送 PDF版下载 如流开放了消息发送接口,企业可以使用这些接口让企业应用与用户间进行双向通信。 推送消息 向成员推送消息 请求方式:POST(HTTPS) 请求地址:https://api.im.baidu.com/api/message/send?access_token=ACCESS_TOKEN 请求body:(每种类型的消息请求body不同,详见消息推送格式) 参数说明: 参数 类型

  • 1、离线消息 接口说明: 接口类型:回调型接口 接口作用:智齿将客服发送给用户的离线消息推送至企业预先配置好的回调地址上。 请求方法: POST 请求格式: { "type": 202, //消息类型,表示客服发送消息给客户 "partnerId": "", //企业自己的用户id "msgId": "" ,//消息id "content": "" ,//客

  • 用户画像+平台提供了一个全新的功能:消息推送(目前支持为小米手机用户推送消息)。用户可以根据需要创建客群,待客群生成后,点击客群右侧的“推送消息”按钮,即可设置消息推送任务。 推送消息前,需要在小米开放平台接入小米推送服务和获得应用信息(App ID,App Key,App Secret等)。小米推送服务具体请参考:https://dev.mi.com/console/appservice/pus

  • 本文向大家介绍iOS点击推送消息跳转处理,包括了iOS点击推送消息跳转处理的使用技巧和注意事项,需要的朋友参考一下 当用户通过点击通知消息进入应用时 launchOptions 中会有推送消息的userInfo信息,此时我们可以通过 获得推送消息内容。如果remoteNotification不为空,则说明用户通过推送消息进入,那么可以声明一个属性 用于标识用户是否通过点击通知消息进入本应用。此时,

  • 我正在开发android GCM,以便我的应用程序向用户发送推送通知。我正在学习这个教程 http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/ 但是在本教程中,它表明我们可以向单个设备发送推送通知。但我想一次向所有用户发送推送通知。

  • 消息推送有着十分广阔的应用场景: 新品上架,推送消息给用户,点击即进入商品详情页面。 用户很久没有进入站点了,推送消息告知这段时间站点的更新。 使用推送消息通知,能够让我们的应用像 Native App 一样,提升用户体验。 但是目前整体支持度并不高,在手机端更是只有安卓 Chrome57 支持。 如同淘宝卖家将商品送到用户家中需要依赖快递公司,服务器向浏览器推送消息,也需要推送服务(Push S