接收时执行 iOS 推送通知代码
Posted
技术标签:
【中文标题】接收时执行 iOS 推送通知代码【英文标题】:iOS Push Notification code execution on receive 【发布时间】:2015-03-10 10:33:34 【问题描述】:我正在为 ios 开发消息应用程序。
我将用户的电话号码保存在服务器上,但我不在后端保存联系人姓名。
当用户收到来自服务器的推送通知时,服务器将电话号码和消息内容在通知负载中发送给用户。我实现了 application:didReceiveRemoteNotification:fetchCompletionHandler 方法来显示本地通知。我在本地数据库中查找 phoneContactName:phoneNumber 对并以以下格式显示本地通知:%phoneContactName%:%messageContent%
但是,障碍是我现在不知道如何在应用未运行时执行此代码。我尝试实现 application:didFinishLaunchingWithOptions 并在那里检查
NSDictionary *userInfo = [launchOptions valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
但是这段代码没有被调用。
所以为了解决这个问题我想问你我应该使用什么架构模型。我应该在服务器端保留联系人姓名以从服务器端发送带有联系人姓名的 notification.alert(到目前为止我的服务器不知道联系人电话号码的名称)还是有什么方法可以在应用程序时执行代码没有运行?
附:此外,我在收到通知时计算客户端的徽章编号。所以,如果可能的话,代码执行方案会更好。
谢谢
【问题讨论】:
【参考方案1】:我认为您的架构是正确的。您的问题归结为您的应用当前所处的应用状态之一。
如果您的应用程序被终止或从未打开过,那么application:didFinishLaunchingWithOptions
中的上述代码将被执行,但是,如果您的应用程序处于后台或挂起状态,则将调用以下方法。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo`
因此您还需要在应用委托中实现这一点。
希望对你有帮助
【讨论】:
我的问题是 application:didFinishLaunchingWithOptions 在我的情况下没有被调用。我做错了吗?application:didFinishLaunchingWithOptions
仅在应用程序终止时调用。这通常是当设备打开或 iOS 操作系统终止进程时应用程序第一次运行。我假设应用程序正在从挂起状态打开,这意味着不会调用application:didFinishLaunchingWithOptions
。如果用户在应用程序处于此状态时通过通知打开您的应用程序,application:didReceiveRemoteNotification
是被调用的方法。
谢谢。正如我从相关答案中了解到的那样,应用程序:didFinishLaunchingWithOptions 在用户按下徽章时被调用。我的服务器不知道 phoneContactName 并且仅在有效负载中发送 phoneNumber 和 messageContent。 application:didReceiveRemoteNotification 方法在应用程序处于前台或后台时调用,但该方法和 application:didFinishLaunchingWithOptions 都不会在应用程序挂起时调用。如果应用被暂停,我应该如何将 phoneNumber 替换为 phoneContactName?【参考方案2】:
您必须管理应用的活动或非活动状态,例如
UIApplicationState state = [application applicationState];
if (state == UIApplicationStateActive)
// Below Code Shows Message While Your Application is in Active State
else
//for app recieving notification in background and tap on notification
【讨论】:
以上是关于接收时执行 iOS 推送通知代码的主要内容,如果未能解决你的问题,请参考以下文章