Поддержка SiriKit для общих служб
Я смотрел SiriKit в wwdc и читал документ.
Добавляйте поддержку SiriKit, только если ваше приложение реализует один из следующих типов сервисов:
- Аудио или видео звонки
- Обмен сообщениями
- Поиск фотографий
- Разминки
- Бронирование поездки
Я все еще задаюсь вопросом, могу ли я сделать для других служб (так как мое приложение будет для корпоративного приложения).
Мой сервис будет очень просто искать только как "Найти SQ212 в myapp".
Это можно сделать? Я боюсь, что Sirkit не может поддерживать намерения для других услуг.
2 ответа
Нет, ты не можешь. Вот почему в нем говорится "только если ваше приложение реализует один из следующих типов сервисов".
Вы не получите 'найти foo
в bar
синтаксис; каждый соответствующий сервис имеет собственный синтаксис - например, "начать тренировку в MyApp" или "заказать поездку в place
с MyApp". См. https://developer.apple.com/sirikit/ для примеров.
Я ожидал бы, что обходной путь с использованием API SiriKit приведет к отклонению вашего приложения, если оно будет отправлено в общий магазин приложений, и я ожидаю, что оно будет чрезвычайно хрупким, если оно прошло проверку приложения или не прошло его в первую очередь.
Я нашел эту статью о создании Sirikit Extensions
это не те, которые по умолчанию предоставляются Apple на swifting.io.
Вот ссылка:
https://swifting.io/blog/2016/07/18/20-sirikit-can-you-outsmart-provided-intents/
Используя INVocabulary
Из документации Apple:
Объект INVocabulary позволяет дополнить фиксированный словарь вашего приложения терминами, которые являются уникальными как для вашего приложения, так и для текущего пользователя вашего приложения. Регистрация пользовательских терминов предоставляет Siri подсказки, необходимые для правильного применения этих терминов к соответствующим объектам намерений. Вы можете зарегистрировать только определенные типы пользовательских терминов, таких как имя контакта, имя тренировки пользователя, пользовательский тег, примененный к фотографии, или тип оплаты, определенный пользователем.
public enum INVocabularyStringType : Int {
case contactName
case contactGroupName
case photoTag
case photoAlbumName
case workoutActivityName
case carProfileName
}
INMessage
Здесь они используют INSearchForMessagesIntent для настройки поиска по индексу для поиска поддержки.
struct SupportMe{
static let systems = [
INPerson(personHandle: INPersonHandle(value: "MyNotes",
type: INPersonHandleType.unknown),
nameComponents: nil,
displayName: "MyNotes",
image: nil,
contactIdentifier: "MyNotes",
customIdentifier: "MyNotes")]
static let articles = [
INMessage(identifier: "MyNotesPassword",
content: "Retrieving password in MyNotes app. To retrieve
password use 'forgot password' button that is located below
sign in button. Then type email address that your account has
been assigned to and press reset password",
dateSent: Date(),
sender: SupportMe.systems[0],
recipients: [SupportMe.systems[0]])]
}
extension IntentHandler: INSearchForMessagesIntentHandling{
func handle(searchForMessages intent: INSearchForMessagesIntent,
completion: (INSearchForMessagesIntentResponse) -> Void){
let userActivity = NSUserActivity(activityType: String(INSearchForMessagesIntent.self))
let response = INSearchForMessagesIntentResponse(code: .success,
userActivity: userActivity)
response.messages = [SupportMe.articles[0]]
completion(response)
}
}