应用退出或挂起时处理推送负载

Posted

技术标签:

【中文标题】应用退出或挂起时处理推送负载【英文标题】:Handle Push Payload when the App is Exited or Suspended 【发布时间】:2015-08-26 11:54:40 【问题描述】:

在接收推送有效负载时,我已经处理了所有情况,除了一个。

这是我的实现:

如果应用程序处于后台、非活动或活动状态,那么我们可以使用此方法接收通知。

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

       //Received Notification when the Application is Active, InActive or in Background State. 
       // NOTE : I am Handling below line of code with the Appropriate Conditions using Application States in my Code.
       [self handleNotificationDataWithDictionary:dictionary updateUI:YES];

如果应用程序被暂停或退出,那么我们可以在 didFinishLaunchingWithOptions 方法中接收通知负载,但仅限于用户点击通知的情况。

这是在应用退出或暂停并通过点击主屏幕或锁定屏幕的推送通知打开时接收有效负载的实现,

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

       if (launchOptions != nil)
       
           NSDictionary *dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
           if (dictionary != nil)
           
               [[[UIAlertView alloc] initWithTitle:@"Finish" message:@"Test" delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil] show];
               NSLog(@"Launched from push notification: %@", dictionary);
              [self handleNotificationDataWithDictionary:dictionary updateUI:NO];
           
       

现在最后的情况是,当应用程序被挂起并且用户没有使用通知中心打开应用程序而是通过点击应用程序图标打开应用程序时。 当我测试我的代码时,在这种情况下我无法接收有效负载。我用谷歌搜索了很多,但没有找到关于这个案例的解决方案。

根据应用程序文档,当应用程序未处于活动状态时,我们只能在后台或非活动模式下获取有效负载。那么如何实现 Suspended State 呢?

我真的需要这方面的帮助,请发布您的最佳答案,以便对其他人也有用。

【问题讨论】:

【参考方案1】:

简单地说 - 如果用户点击应用图标,你的推送就消失了!无法检索该信息。

Official Documentation about this:

如果在运行 ios 的设备上点击应用图标,应用会调用相同的方法,但不会提供有关通知的信息。

【讨论】:

【参考方案2】:

hris.to 是绝对正确的,如果你想在你的应用中自定义通知面板,你必须构建一个 API,然后再次从服务器获取最新的通知。

【讨论】:

以上是关于应用退出或挂起时处理推送负载的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 cpu/内存使用情况或挂起的请求返回 503 服务器繁忙?

选择退出用户的静默推送通知

iOS - 当应用程序被用户强制退出时处理静默推送通知

当应用程序被用户强制退出时处理推送通知iOS(替代方案?)

为啥在 macOS 上使用 QThread 时 PyQt 应用程序崩溃或挂起?

原生 Android 应用程序在挂起时是不是应该释放 OpenGL 资源?