【问题标题】:iOS - automatically open app from backgroundiOS - 从后台自动打开应用程序
【发布时间】:2015-08-27 12:47:14
【问题描述】:

是否可以通过某种方式从后台模式重新打开应用程序? 例如,后台的应用程序正在检查服务器的某个标志,然后当触发时,它会自动转到前台?

如果没有,我可以显示一条消息并播放声音让用户请求重新打开应用程序吗?

例如 WhatsApp 如何实现这一点?

【问题讨论】:

    标签: ios


    【解决方案1】:

    无法自动打开应用程序,这意味着将应用程序显示给用户。

    但是,可以使用推送通知在后台打开您的应用程序,以便它可以执行一个简短的任务。这是通过使用content-available 字段创建push notification 来实现的。

    如果您的服务器在您的应用有新内容可用时向用户的设备发送推送通知,您可以要求系统在后台运行您的应用,以便它可以立即开始下载新内容。这种后台模式的目的是尽量减少从用户看到推送通知到您的应用能够显示相关内容之间的时间。应用程序通常在用户看到通知的大致同一时间被唤醒,但这仍然会给您比其他情况更多的时间。

    要支持这种后台模式,请从 Xcode 项目的 Capabilities 选项卡的 Background mode 部分启用 Remote notifications 选项。 (您还可以通过在应用的 Info.plist 文件中包含 UIBackgroundModes 键和 remote-notification 值来启用此支持。)

    对于触发下载操作的推送通知,通知的有效负载必须包含值设置为 1 的内容可用键。当该键存在时,系统会在后台唤醒应用程序(或将其启动到背景)并调用应用程序委托的application:didReceiveRemoteNotification:fetchCompletionHandler: 方法。您对该方法的实现应下载相关内容并将其集成到您的应用中。

    下载任何内容时,建议您使用NSURLSession 类来启动和管理您的下载。有关如何使用此类管理上传和下载任务的信息,请参阅URL Loading System Programming Guide


    我可以为用户显示一条消息并播放声音以请求重新打开应用程序吗?

    是的,您可以使用Local Notification or a Push Notification

    【讨论】:

    • 如果我们假设应用程序已安装在设备上,但从未打开(因此从未建立与 APNs 的通信,因此不可能发生推送通知) - 任何事情都会导致应用程序启动(在后台)除了用户显式打开应用程序(或导致应用程序打开并实际进入前台的其他方式)?
    • @uerceg,不,我不认为这是可能的。
    【解决方案2】:

    根据 Apple 的说法,当应用程序在后台运行时,所有功能将自动暂停,并在应用程序再次激活时恢复。您唯一可以通过徽章或声音进行本地通知的方法请阅读此文档以获取更多信息 Notification

    【讨论】:

      【解决方案3】:

      如果后台的应用程序正在检查服务器的某些标志,并且 那么触发时会自动转到前台吗?

      目前不可能。

      我可以为用户显示一条消息并播放声音来请求应用程序吗 重新打开?

      是的。当您发送本地通知时,用户屏幕上会弹出一个警报。添加本地通知的示例代码:

      UILocalNotification* localNotification = [[UILocalNotification alloc] init];
      localNotification.alertBody = @"AlertBody";
      localNotification.alertAction = @"AlertAction";
      localNotification.timeZone = [NSTimeZone defaultTimeZone];    
      [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
      

      通过点击通知打开应用程序时,以下参数'launchOptions'将获取值:

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

      调试并找到launchOptions的值:

          [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-01
        • 1970-01-01
        • 2017-01-26
        • 1970-01-01
        相关资源
        最近更新 更多