2017-08-07 3 views
1

、意図を使用してビルのお支払い方法:(iOSの10.3+で最近発売された、2017年3月27日)Siri - Lang Swift 3、INPayBillIntentは動作していません、Siriは "DemoAppで続行する必要があります。開こうと思いますか?"私はシリキットを統合しています

INPayBillIntentHandling。

アップルのマニュアルはhereです。

注:iOS 10.3.3 &と一緒に、Swift言語、XCode 8.3、デバイスiPhone 6を使用しています。デモプロジェクトiOSデプロイメントターゲットはiOS 10.3で、初めての許可を求められたときにSiriも有効になりました。設定では、Siriが有効になっています。 私がデバイスでアプリを起動し、「DemoAppを使用してBill Payment」と言うと、Siriは「DemoAppでこの情報を入手できます。DemoAppに行きたいですか?

私を助けてください。前もって感謝します!これまでのところ、私は、次の手順でし

1)メインアプリケーションの機能ではデモXcodeプロジェクト

2)を作成し、シリを可能にしました。 >意図拡張を - - >新規 - - >ターゲットを追加

3)

ファイルを使用してシリキットの拡張機能を追加しました>次 - > [商品を追加して、[完了

注意を言う:私は無効シリキットUI拡張をしました。メインアプリケーションのInfo.plistで

import Intents 

INPreferences.requestSiriAuthorization { (status) in 
      if status == INSiriAuthorizationStatus.authorized{ 
       print("Authorized") 
      }else 
      { 
       print("Not authorized") 
      } 
     } 
     return true 

5)IntentExtensionにおいて使用説明

6)のInfo.plist、NSExtension->とキーNSSiriUsageDescriptionを追加: 4)主にAppDelegate.swiftは、次の追加しましたIntentsSupported->、IntentHandler.swiftでキーINPayBillIntent

7)を加え、この追加:PayBillHandler.swift広告で

override func handler(for intent: INIntent) -> Any { 
     if intent is INPayBillIntent{ 
      print("Response: payBill") 
     return PayBillHandler() 
     } 

8) DED INPayBillIntentHandlingのためのすべてのデリゲートメソッド:それはちょうど迅速のためにそれを修正し、質問がまだ答えを待って、Joao Nunes's questionと同じ質問ですねところで

import Intents 


class PayBillHandler: NSObject, INPayBillIntentHandling { 
    func handle(intent: INPayBillIntent, completion: @escaping (INPayBillIntentResponse) -> Void){ 

     let userActivity = NSUserActivity(activityType: NSStringFromClass(INPayBillIntent.self)) 
     let response = INPayBillIntentResponse(code: .ready, userActivity: userActivity) 
     completion(response) 
    } 
    func resolveBillType(for intent: INPayBillIntent, with completion: @escaping (INBillTypeResolutionResult) -> Void) { 

     let finalResult = INBillTypeResolutionResult.success(with: .water) 
     completion(finalResult) 
    } 

    func resolveBillPayee(for intent: INPayBillIntent, with completion: @escaping (INBillPayeeResolutionResult) -> Void) { 

     let speakableStr = INSpeakableString(identifier: "XXX", spokenPhrase: "XXX", pronunciationHint: "XXX") 
     let speakableStr1 = INSpeakableString(identifier: "YYY", spokenPhrase: "YYY", pronunciationHint: "YYY") 
     let billPayee = INBillPayee(nickname: speakableStr, number: "10112122112", organizationName: speakableStr1) 
     let finalResult = INBillPayeeResolutionResult.success(with: billPayee!) 
     completion(finalResult) 
    } 

    func resolveTransactionNote(for intent: INPayBillIntent, with completion: @escaping (INStringResolutionResult) -> Void) { 

     let finalResult = INStringResolutionResult.success(with: "Bill Payment") 
     completion(finalResult) 

    } 
    func resolveDueDate(for intent: INPayBillIntent, with completion: @escaping (INDateComponentsRangeResolutionResult) -> Void) { 

     completion(INDateComponentsRangeResolutionResult.notRequired()) 
    } 
    func resolveFromAccount(for intent: INPayBillIntent, with completion: @escaping (INPaymentAccountResolutionResult) -> Void) { 

     let speakableStr2 = INSpeakableString(identifier: "Someone", spokenPhrase: "Someone", pronunciationHint: "Someone") 
     let speakableStr3 = INSpeakableString(identifier: "", spokenPhrase: "", pronunciationHint: "organisation") 
     let fromAccount = INPaymentAccount(nickname: speakableStr2, number: "10112122112", accountType: .credit, organizationName: speakableStr3) 
     let finalResult = INPaymentAccountResolutionResult.success(with: fromAccount!) 
     completion(finalResult) 

    } 
    func resolveTransactionAmount(for intent: INPayBillIntent, with completion: @escaping (INPaymentAmountResolutionResult) -> Void) { 

     let currencyAmmount = INCurrencyAmount(amount: NSDecimalNumber(string: "100"), currencyCode: "USD") 
     let transactionAmt = INPaymentAmount(amountType: .amountDue, amount: currencyAmmount) 
     let finalResult = INPaymentAmountResolutionResult.success(with: transactionAmt) 
     completion(finalResult) 

    } 
    func resolveTransactionScheduledDate(for intent: INPayBillIntent, with completion: @escaping (INDateComponentsRangeResolutionResult) -> Void) { 

     completion(INDateComponentsRangeResolutionResult.notRequired()) 
    } 

    func confirm(intent: INPayBillIntent, completion: @escaping (INPayBillIntentResponse) -> Void) { 

     let response = INPayBillIntentResponse(code: .success, userActivity: nil) 
     completion(response) 
    } 

} 

、感謝:)

+0

"私の請求書を支払う"または "DemoAppで請求書を支払う"とお試しいただけますか? –

+0

試してみましたが、同じ回答 "あなたはDemoAppでこの情報を得ることができます、あなたはDemoAppに行きたいですか?" –

答えて

0

は、iOS 11ベータ版をインストールしてください5をテスト用の電話機に追加します。

私はiOS 11 beta 5を迅速に使用しようとしていますが、より安定しています。

関連する問題