当应用程序被用户强制退出时处理推送通知iOS(替代方案?)
Posted
技术标签:
【中文标题】当应用程序被用户强制退出时处理推送通知iOS(替代方案?)【英文标题】:Handling push notifications iOS when app is force-quit by user (Alternatives?) 【发布时间】:2016-02-16 17:13:31 【问题描述】:我在 ios 中遇到推送通知问题,与this 和this 和another one 的情况类似。
另外,this post 恢复所有可能的情况。 就我而言:
应用没有运行 内容可用:1 UIBackgroundModes 包含“远程通知”和“获取”如果用户强制退出应用并收到推送通知,则它可以通过警报或图标打开应用。 当用户点击通知时,应用程序将被打开并执行以下方法:
- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
// Handle for notifications when app is closed
if (launchOptions)
NSDictionary *userInfo = [launchOptions valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
NSDictionary *apsInfo = [userInfo objectForKey:@"aps"];
if (apsInfo)
// handle notification
到这里为止没问题,我有负载可以用该信息做一些事情(例如从服务器获取新数据)。
但是,如果用户从图标打开应用程序,我将无法处理有效负载(尽管执行了 didFinishLaunchingWithOptions,但根据文档 here,我没有 aps 信息)。
所以,问题是,有什么办法可以解决这个问题? 例如,我用 WhatsApp 进行了测试,他们处理了这种情况,(可能他们使用的是 VOIP 通知而不是远程通知)
问候
【问题讨论】:
我的猜测是,当应用程序处于活动状态时,他们正在通过 API 从远程服务器加载数据,而不是从通知中加载。 感谢您的回复,是的,这是另一种选择。但我对客户端的可能性表示怀疑。 亲爱的 Fe Juarez,我也坚持这个 从上周开始,但还没有解决,你能解决这个..??如果您对此有任何想法、描述、示例、代码,请剪我。提前致谢! 【参考方案1】:您永远不应假设状态在通知发送时间和用户启动应用时间之间保持一致。甚至,它也不是同一个设备。我会经常收到“嘿!做点什么!”我的手机上的通知,如果我的 iPad 很方便,请在我漂亮的 iPad 大屏幕上回复它。
相反,您应该往返于服务器并在应用启动或激活时获取该用户的最新状态。
【讨论】:
你是对的。但是以 WhatsApp 为例,如果应用程序关闭并且收到新通知(并且您的设备处于飞行模式),则在打开应用程序之前显示的消息列表会更新。所以,我认为该列表是根据通知更新的。 当然——他们也可能从通知本身中提取信息。实际上,您的消息流是一大块时间序列数据,其中可以编辑(删除)流中的事件。您的客户必须跟踪他们上次看到流的时间以及跟踪之前编辑内容的方法。通知负载可能会提供一组最近的时间序列事件,但您最终需要往返服务器以重新获得“真相”。您可能还需要考虑将“已看到”推送回服务器以供用户的其他客户端设备使用。以上是关于当应用程序被用户强制退出时处理推送通知iOS(替代方案?)的主要内容,如果未能解决你的问题,请参考以下文章
当用户通过向上滑动强制退出应用程序时,可操作的推送通知不会出现在 iOS 8+ 设备上
检测应用程序是不是通过单击应用程序图标或推送通知启动(当应用程序被用户强制终止时)
当收到 IOS 13 SDK 的通知时,啥是推送工具包的替代方案来处理终止状态