通过单击应用程序图标直接启动应用程序时,无法获取通知数据

时间:2015-11-02 05:01:20

标签: ios objective-c apple-push-notifications appdelegate

我有一个应用程序将获得推送通知并需要在我的应用程序的主屏幕中显示该消息的场景,因为我将消息数组保存到我的应用程序委托的用户默认值,一切正常,但在以下条件它无法正常工作

  1. 如果应用程序处于被杀死状态并且发出通知并且用户通过应用程序图标触发应用程序(而不是来自推送通知)

  2. 如果应用程序处于后台并且通知发出,用户通过应用程序图标(不是来自推送消息)进入应用程序,在这种情况下

  3. 然后我搜索了解决方案,并了解了静音推送通知(对于后台模式),没有别的,所以我需要知道如何通过推送通知处理所有场景,我的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
    }
    

    提前致谢

4 个答案:

答案 0 :(得分: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];
      }
}

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

  1. 如果应用程序处于被杀死状态并且发出通知并且用户通过应用程序图标触发应用程序(而不是来自推送通知)

    • 如果应用程序处于被杀死状态,则只有当用户点击推送通知本身时,才能将推送通知有效负载移交给应用程序。如果用户从应用程序图标启动应用程序,则通知有效内容将不会传递给应用程序
  2. 如果应用程序处于后台并且通知发出,用户通过应用程序图标(不是来自推送消息)进入应用程序,在这种情况下

    • 如果您的目标是iOS7及更高版本,那么您需要为远程通知启用后台模式。请检查以下链接,以便在应用程序处于后台时获取通知有效负载

    didReceiveRemoteNotification not working in the background

    当app处于前台,后台和暂停状态时,会调用上面提到的app delegate方法。

  3. 当应用程序被终止时以及直接点击应用程序图标而不是通知中心的推送通知时,无法获取通知有效负载。

答案 3 :(得分:0)

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

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

在您的应用代理中。