从 iOS8 中的通知在后台启动呼叫

Posted

技术标签:

【中文标题】从 iOS8 中的通知在后台启动呼叫【英文标题】:Launch a call when in background from a notification in iOS8 【发布时间】:2015-05-21 09:53:44 【问题描述】:

ios8开始,我们可以在UILocalNotification中显示一些提示选项

在我的应用程序中,我可以选择报警。据我所知,从后台发起呼叫是不可能的,那么你有什么建议?我可以启动应用程序然后触发呼叫吗?或者还有其他选择吗?

【问题讨论】:

你可以启动应用并调用 【参考方案1】:

如果您想在推送通知到达时在后台线程中执行操作(未挂起),您需要在推送通知有效负载中发送“content-available”:@“1”。有了这个,你就可以在后台处理应用程序

您可以在使用断点实现后进行测试。 当应用程序正在运行但在后台发送推送通知。

内容可用

【讨论】:

这是一个简单的预定UILocalNotification 如果您的应用正在使用位置、播放音频,您可以从后台调用方法......developer.apple.com/library/ios/documentation/iPhone/Conceptual/… 好的,我们可以启动一个方法,但是我们不能启动电话应用来拨打电话。 是的,我们不能为该用户打开应用程序,您可以将代码发送到服务器并致电该地区的警察【参考方案2】:

所以,我找到了一个解决方案: 声明UIMutableUserNotificationAction时,应将其激活模式设置为UIUserNotificationActivationModeForeground

UIMutableUserNotificationAction *notificationAction1 =[[UIMutableUserNotificationAction alloc] init];
    notificationAction1.identifier = @"identifier1";
    notificationAction1.title = @"identifier1";
    notificationAction1.activationMode = UIUserNotificationActivationModeForeground; //HERE the tip
    notificationAction1.destructive = NO;
    notificationAction1.authenticationRequired = NO;

然后在你的 AppDelegate 方法中:

- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler 
    if ([identifier isEqualToString:@"identifier1"]) 
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber]];


就是这样!

【讨论】:

以上是关于从 iOS8 中的通知在后台启动呼叫的主要内容,如果未能解决你的问题,请参考以下文章

从服务启动活动

当应用程序在后台运行时获取 iPhone 通知以呼叫我的委托

iOS 10:如何在应用程序处于后台时显示传入的 VOIP 呼叫通知?

iOS 8 推送通知操作按钮 - 当应用程序在后台时,handleActionWithIdentifier 中的代码并不总是运行

当来电活动置于后台时返回呼叫 UI

如果应用程序从后台终止,则不会收到 Pushkit 通知