通过单击应用程序图标直接启动应用程序时未收到推送通知数据

Posted

技术标签:

【中文标题】通过单击应用程序图标直接启动应用程序时未收到推送通知数据【英文标题】:Push notification data not getting when app launched directly by clicking app icon 【发布时间】:2015-11-02 05:01:20 【问题描述】:

我有一个场景,应用程序将收到推送通知并需要在我的应用程序的主屏幕中显示该消息,为此我将消息数组保存到我的应用程序委托的用户默认值中,并且一切正常,但在以下情况下它不工作

    如果应用程序处于终止状态并且收到通知并且用户通过应用程序图标触发应用程序(不是来自推送通知)

    如果应用程序在后台并且收到通知并且用户通过应用程序图标(不是来自推送消息)进入应用程序,在这种情况下也是

然后我搜索了解决方案并开始了解静默推送通知(用于后台模式),因此我需要知道如何通过推送通知处理所有场景,而我的 appdelegete 是

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

NSDictionary *remoteNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];


    if (remoteNotif) 

        [self handlePushMessage:remoteNotif];
    
    return YES;


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


    [self handlePushMessage:userInfo];



-(void)handlePushMessage :(NSDictionary*)userInfo

   //method to handle push message

提前致谢

【问题讨论】:

如果您的应用程序被用户终止,那么如果用户从应用程序图标启动您的应用程序,则无法找到推送通知 我认为是这样,最好创建 Web 服务,让您响应迄今为止发送的所有消息。bcz 第一种情况无法处理,第二种情况可以通过静默通知处理。 感谢您的快速响应 :) 如果在用户第一次启动应用程序之前收到通知,那么会发生什么? okei在静默通知的情况下是否有可能被应用商店拒绝 在您的用户首次启动您的应用程序之前,您无法接收远程通知,因为您尚未注册远程通知,并且您的服务器没有远程通知标识符来发送通知设备 【参考方案1】:

这是一个常见问题:如果用户没有通过显示的通知打开您的应用程序,则无法*获得相关信息。

* 许多应用程序采用的一种可能的解决方案是检查远程服务器是否有未读通知(例如,检查未设置的读取日期字段)。

【讨论】:

感谢您的回答【参考方案2】:

在场景1中,NSDictionary *remoteNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];这里remoteNotif返回nil通过触发应用图标进入应用。

在场景2中,您可以通过以下方法获取推送通知信息

-(void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

      if (userInfo) 

          [self handlePushMessage:userInfo];
      

【讨论】:

感谢您的回答,但这不是我要找的答案:(【参考方案3】:

    如果应用程序处于终止状态并且收到通知并且用户通过应用程序图标触发应用程序(不是来自推送通知)

    如果应用程序处于终止状态,则只有当用户点击推送通知本身时,推送通知有效负载才能移交给应用程序。如果用户从应用程序图标启动应用程序,则通知负载将不会传递给应用程序

    如果应用程序在后台并且收到通知并且用户在这种情况下通过应用程序图标(不是来自推送消息)进入应用程序

    如果您的目标是 ios7 及更高版本,则需要为远程通知启用后台模式。即使应用程序在后台,请检查以下链接以获取通知负载

    didReceiveRemoteNotification not working in the background

    当应用处于前台、后台和挂起状态时,会调用上述应用委托方法。

当应用被杀死和直接点击应用图标而不是在通知中心推送通知时,无法获取通知负载。

【讨论】:

【参考方案4】:

在目标设置功能的后台模式下启用“远程通知”。即使应用程序在后台,这也会获取通知数据。另外,请务必实现:

-(void)application:(UIApplication *)application 
didReceiveRemoteNotification:(NSDictionary *)userInfo 
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler;

在您的应用委托中。

【讨论】:

以上是关于通过单击应用程序图标直接启动应用程序时未收到推送通知数据的主要内容,如果未能解决你的问题,请参考以下文章

系统刚启动时未收到 FCM 通知

react native - 应用程序被杀死/未启动时未收到通知

应用关闭时未收到 Android 推送通知

应用程序处于后台时未收到后台获取远程通知,并且用户未通过推送通知进入

通过 FCM 发送时未收到推送通知,但在 IOS 上通过 APN 发送时收到

单击通知区域中的消息时未打开应用程序