【问题标题】:Apple watch forces open app in foreground on iphone on particular screen?Apple Watch 在特定屏幕上强制在 iphone 的前台打开应用程序?
【发布时间】:2018-04-28 09:07:38
【问题描述】:

是否可以让 Apple Watch 强制打开 iphone 应用和/或在特定屏幕上打开?

我已经发现它在后台运行应用程序(但不显示应用程序已经启动),甚至可以下载数据。当我在 iphone 上点击应用程序图标时 - 应用程序会跳过初始屏幕和“appdidfinishlaunching...”步骤。

【问题讨论】:

  • 您具体要问什么并不是很清楚。您是否希望手表扩展能够强制您的 iPhone 应用程序进入前台,或者在与手表通信后下次打开时打开到 iPhone 上的特定屏幕?
  • 没有。我阅读了文档并找到了这个方法:developer.apple.com/documentation/watchkit/…“这个方法仅适用于在 watchOS 1 中运行的 WatchKit 扩展。在 watchOS 2 或更高版本中运行的手表应用程序必须使用 Watch Connectivity 框架与配套的 iOS 应用程序进行通信。了解更多信息,请参阅 WatchConnectivity。”而且我不知道如何处理 watchos 2 及更高版本

标签: ios watchkit apple-watch foreground watchconnectivity


【解决方案1】:

openParentApplication() 实际上已被弃用。新约定是使用 WatchConnectivity。 This link 将有助于为您提供一些信息,this link 是 Apple 的 Watch Connectivity 示例项目。为了回答您的问题,您需要使用手表扩展程序中的 sendMessage() 函数发出请求,该请求将在后台唤醒相应的 iOS 应用程序并允许其返回请求的数据。

这是一个消息请求的小示例,它将在后台激活您的 iOS 应用程序。但是,您需要先在应用程序中设置 Watch Connectivity。

在您的手表扩展中

func sendActivationMessage() {
    if session.activationState == .activated && session.isReachable {
        session.sendMessage(["Watch Message" : "Activate"], , replyHandler: nil, errorHandler: nil)
    }
}

在您的 iOS 应用程序中

func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {
    if let messageFromWatch = message["Watch Message"] {
        let messageData = messageFromWatch as! String

        if messageData == "Activate" {
           // Handle Request
        }
    }
}

【讨论】:

  • 您发布了如何在后台将消息从手表发送到 iOS 应用程序的信息。但它没有回答问题 - “如何在前台激活 iOS 应用程序?”
  • 无法从 Apple Watch 强制打开 iOS 设备上的应用程序。仅在后台。
  • 即使 openParentApplication() 可用,它也只允许您在后台访问应用程序
  • 当父应用收到消息时,可以设置本地通知用户调用应用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多