【问题标题】:Launch app from INExtension in SiriKit从 SiriKit 中的 INExtension 启动应用程序
【发布时间】:2016-11-27 00:33:05
【问题描述】:

我想使用 SiriKit 开始锻炼。开始锻炼需要从应用程序扩展打开主应用程序。

Apple 为 INStartWorkoutIntentHandling 处理程序提供的样板文件是

func handle(startWorkout startWorkoutIntent: INStartWorkoutIntent, completion: (INStartWorkoutIntentResponse) -> Void) {
    let userActivity = NSUserActivity(activityType: NSStringFromClass(INStartWorkoutIntent))
    let response = INStartWorkoutIntentResponse(code: .success, userActivity: userActivity)
    completion(response)
}

如何从这里打开我自己的应用程序? myapp://workout?action=start&name=pushups This answer 之类的东西似乎不相关,因为我没有 UIViewControllerextensionContext 属性的这种扩展类型。

最后一点:对于其他操作(暂停、结束),我不想打开主应用程序,而是简单地暂停在主应用程序中运行的锻炼。我可以使用类似的自定义 URL 来暂停它,但这会打开应用程序,这是一个额外的不必要的步骤。有什么好方法可以告诉主应用在不打开应用的情况下从 INExtension 执行特定操作?

【问题讨论】:

  • Apple 已经定义了failureRequiringAppLaunch 响应代码,这几乎意味着从 Apple 的角度来看这不是一个有效的用例。要求应用程序扩展重新实现我的应用程序的核心用例似乎是不合理的(例如,锻炼不仅仅涉及音频)。我希望用户能够使用我的自定义词汇说“Siri,从 MY-APP 开始 10 分钟上身锻炼”,然后它会在应用中开始锻炼。

标签: ios ios-app-extension ios10 siri sirikit


【解决方案1】:

对我来说,我能够像这样启动应用程序:

let activity  = NSUserActivity(activityType: NSUserActivityTypeBrowsingWeb)
activity.webpageURL = URL(string: "https://mywebsite/...")        
completion(MyIntentResponse(code: .continueInApp, userActivity: activity))

然后这将在 AppDelegate 中被调用

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
        if let url = userActivity.webpageURL {
            handleDeeplink(url)
        }
    }
    return false
}

【讨论】:

    【解决方案2】:

    为了后代:原来这是 Xcode 8 beta 之间此功能的一个阶段,它已在 Xcode 8 beta 3 中解决。他们在此版本中将 .continueInApp 代码添加到 INStartWorkoutIntentResponseCode,但它不是t 在 Xcode 8 beta 2 中。此状态代码允许直接传递 NSUserActivity(无需使用 URL 方案)。

    【讨论】:

    • 顺便说一句,如果你的意图是让用户选择应用程序,你不需要去应用程序启动。你可以通过 Siri 做到这一点
    • 结束了 .continueInApp 因为我想用我的广告展示锻炼
    • 如果我想从 RideIntentExtension Handler 打开应用程序怎么办?我在rideIntentExtension 中找不到.continueInApp 类型
    • @AshishPisey 你有没有找到不使用 continueInApp 来打开主应用程序的方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    相关资源
    最近更新 更多