SiriKit INSendMessageIntent пропустить подтверждение делегирования

Я некоторое время работал над SiriKit, и результат моей демонстрации не удовлетворил моего начальника. Прочитав все документы Apple и сделав все возможное для поиска в Интернете, я все еще не могу найти способ пропустить шаг подтверждения в SendMessageIntent!


Это моя цель:

После разрешения комментариев пользователей к Siri,

func resolveContent(forSendMessage intent: INSendMessageIntent, with completion: @escaping (INStringResolutionResult) -> Void) {
    if let text = intent.content, !text.isEmpty {
        if text == "Login with Touch ID" {
            completion(INStringResolutionResult.success(with: text))
        } else if text == "Change password"{
            completion(INStringResolutionResult.success(with: text))
        }
        completion(INStringResolutionResult.disambiguation(with: ["Login with Touch ID", "Change password"]))
    } else {
        completion(INStringResolutionResult.disambiguation(with: ["Login with Touch ID", "Change password"]))
    }
}

Пропустите этот шаг "подтвердить",

func confirm(sendMessage intent: INSendMessageIntent, completion: @escaping (INSendMessageIntentResponse) -> Void) {
    // Verify user is authenticated and your app is ready to send a message.

    let userActivity = NSUserActivity(activityType: NSStringFromClass(INSendMessageIntent.self))
    let response = INSendMessageIntentResponse(code: .success, userActivity: userActivity)

    completion(response)
}

И сделайте дескриптор делегата напрямую,

func handle(sendMessage intent: INSendMessageIntent, completion: @escaping (INSendMessageIntentResponse) -> Void) {
    // Implement your application logic to send a message here.

    let userActivity = NSUserActivity(activityType: NSStringFromClass(INSendMessageIntent.self))
    let response = INSendMessageIntentResponse(code: .success, userActivity: userActivity)

    completion(response)
}

Надеюсь, что кто-то может ответить на этот вопрос для меня. Большое спасибо!


person Bomi Chen    schedule 15.08.2017    source источник


Ответы (2)


Функция confirm не является обязательной, ее не нужно реализовывать, чтобы соответствовать протоколу INSendMessageIntentHandling, требуется только handle(intent:completion:). Это показывает, что вы можете пропустить часть подтверждения.

Вам нужно просто удалить функцию confirm, и SiriKit вызовет вашу функцию handle напрямую, без подтверждения.

person Dávid Pásztor    schedule 15.08.2017
comment
Привет, Дэвид, спасибо за вопрос. Я попробовал ваш способ для достижения своей цели, но после функции подтверждения удаления моя Siri по-прежнему подтверждает отправленное мной сообщение. Помимо удаления функции подтверждения, есть ли что-то, что я пропустил? - person Bomi Chen; 17.08.2017

Как ответил @Dávid Pásztor.

Не реализуйте функцию confirm. Не отмечайте User confirmation required в определении YourXX.intent.

И вы должны удалить предыдущий ярлык, а затем прочитать.

person Xiaolong.Jin    schedule 17.02.2019