2017-10-26 11 views
1

私はSiri WorkOutインテントを自分のアプリに統合しようとしています。 は `handleInApp`を使用していますWorkoutIntentResponseCode Siriは常に廃止された` continueInApp`とは違って、「申し訳ありません、あなたはアプリケーションで続行する必要があります」と言います

class StartWorkOutRequestHandling : NSObject, INStartWorkoutIntentHandling { 
    func handle(startWorkout intent: INStartWorkoutIntent, completion: @escaping (INStartWorkoutIntentResponse) -> Void) { 
     if let _ = intent.workoutName { 
      if #available(iOSApplicationExtension 11.0, *) { 
       let userActivity = NSUserActivity(activityType: "test") 
       let response = INStartWorkoutIntentResponse(code: .handleInApp, userActivity: userActivity) 
       completion(response); 
      } 
      else { 
       // Fallback on earlier versions 
       let userActivity = NSUserActivity(activityType: "test") 
       let response = INStartWorkoutIntentResponse(code: .continueInApp, userActivity: userActivity) 
       completion(response) 
      } 

     } 
     else { 
      let response = INStartWorkoutIntentResponse(code: .failureNoMatchingWorkout, userActivity: .none) 
      completion(response); 
     } 
    } 
} 

あなたがhandle(startWorkoutで見ることができるように

はない、私は continueInAppを使用する場合ははい、私は handleInApp応答コードを使用する場合のiOSのバージョンが11以上であるかどうかをチェックしています。 (:10.0、非推奨:11.0、メッセージ: "INStartWorkoutIntentResponseCodeContinueInAppはiOSでは推奨されません 代わりINStartWorkoutIntentResponseCodeHandleInAppを使用してください" のiOSは、導入された) ケースcontinueInApp public enum INStartWorkoutIntentResponseCode : Int {

定義が

が@available言うためです

.handleInAppは、continueInAppとしてアプリを開くバックグラウンドでアプリを開きます。

しかし、私はhandleInAppを使用してシリに「私のAppNameでワークアウトを開始します」と言うとき、シリは

を「申し訳ありませんが、あなたはアプリで継続する必要があります」言うといa MyAppを開くボタン。一方、私は予想通りシリアプリを開き、警告を無視して、単に

func handle(startWorkout intent: INStartWorkoutIntent, completion: @escaping (INStartWorkoutIntentResponse) -> Void) { 
    if let _ = intent.workoutName { 
     let userActivity = NSUserActivity(activityType: "test") 
     let response = INStartWorkoutIntentResponse(code: .continueInApp, userActivity: userActivity) 
     completion(response); 
    } 
    else { 
     let response = INStartWorkoutIntentResponse(code: .failureNoMatchingWorkout, userActivity: .none) 
     completion(response); 
    } 
} 

を使用している場合。両方の場合に注意する価値は何ですか?

- (BOOL)application:(UIApplication *)application 
continueUserActivity:(NSUserActivity *)userActivity 
restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler { 
    //this is a legacy app hence part of code is still in Objective-C 
} 

アプリケーションの代理人メソッドが正しく呼び出されます。

私は

Siri always responds 'Continue in the app' when starting workout with SiriKit

ここに同様の質問を見つけましたが、それは推奨されないcontinueInAppを使用していますけど。だから、iOS 11でそれを使うことはできません。

私はここで間違いを犯しますか?なぜhandleInAppを使用するとアプリが開かれないのでしょうか?また、SiriがAppで続行する必要があると不平を言うのはなぜですか? handleInAppを使用してアプリを開く方法

私はWorkoutインテントを使っている間にSiriからAppを開くことになっていないと思いますが、Workoutインテントに対してもIntentUIをトリガーする方法はないと思います。 参照:

助けてください。

答えて

1

、このいずれかをご確認ください.....

func handle(intent: INStartWorkoutIntent, completion: @escaping (INStartWorkoutIntentResponse) -> Void) { 

     if let _ = intent.workoutName { 
      let userActivity = NSUserActivity(activityType: "test") 
      let response = INStartWorkoutIntentResponse(code: INStartWorkoutIntentResponseCode(rawValue: 2)!, userActivity: userActivity) 
      completion(response); 
     } 
     else { 

      let response = INStartWorkoutIntentResponse(code: INStartWorkoutIntentResponseCode(rawValue: 6)!, userActivity: .none) 
      completion(response); 
     } 
    } 
+0

は答えを投稿いただきありがとうございます。病気は一見して元に戻る。今のところ私はあなたの答えをupvotedしている:+1 –

関連する問題