Запустить приложение через Siri с параметрами, без пожертвований / ярлыков - PullRequest
0 голосов
/ 21 февраля 2020

Предположим, я создаю приложение, в которое пользователь может установить несколько небольших интерактивных приложений ( медитаций ).

Для удобства я бы хотел, чтобы мои пользователи могли запускать один из них: «Эй, Сири, начни Пляжный закат в Медитации».

В силу причин, по которым пользователям имеет смысл выполнять это действие голосом, без когда-либо впервые взаимодействовал с Beach Sunset в приложении iOS. (Они могут, например, уже «владеть» им через веб-приложение моей службы.)

То есть: я хочу голосовое действие типа «Привет, Сири, запусти Beach Sunset in Meditations» работать даже без , когда пользователь сначала создал для него ярлык, или я «жертвовал» действия для него.

Возможно ли это? (Мне кажется, что многие приложения по умолчанию демонстрируют похожее поведение, но, может быть, они особенные.) Если нет, то что я могу сделать лучше всего?

Нужны ли "пожертвования", чтобы Сири была в курсе? голосовых действий моего приложения, или они являются просто механизмом для намека и предсказания поведения пользователя?

Нужны ли «быстрые клавиши», чтобы Сири знал о голосовых действиях моего приложения, или они просто механизм для пользовательской фразы? настройка?

Я никогда не добавлял поддержку Siri в приложение iOS, но кажется, что «параметры» стали намного мощнее в iOS 13. Этот ответ предполагает, что нечто подобное было невозможно в iOS 12, но я думаю, что это также делает что-то несколько иное (я хочу запустить приложение; они хотят «создать объект», предположительно, просто с помощью Intent UI. Я не знаю если это имеет значение.)

Что я сделал

Я определил пользовательское намерение в категории Start (LaunchMeditation) с одним параметр (meditationName).

Я рассмотрел стандартные Медиа намерения, но медиа здесь интерактивные, а не только аудио / видео, и я не хочу попадать в неприятности.

Я добавил расширение Intents в свое приложение и написал элементарный тестовый «обработчик», который просто пытается передать имя медитации в приложение:

@interface IntentHandler () <LaunchMeditationIntentHandling>
@end

@implementation IntentHandler
- (id)handlerForIntent:(INIntent *)intent { return self; }

- (void)handleLaunchMeditation:(nonnull LaunchMeditationIntent *)intent
                    completion:(nonnull void (^)(LaunchMeditationIntentResponse * _Nonnull))completion {
  // XXX: Maybe activity can just be nil?
  NSUserActivity *activity = [[NSUserActivity alloc] initWithActivityType:@"com.example.meditations.activity.launch"];
  activity.title           = [NSString stringWithFormat:@"Launch %@ in Meditations", intent.meditationName]; // Do I need this?
  activity.userInfo        = @{@"meditationName": intent.meditationName};
  completion([[LaunchMeditationIntentResponse alloc] initWithCode:LaunchMeditationIntentResponseCodeContinueInApp
                                                     userActivity:activity]);
}

- (void)resolveMeditationNameForLaunchMeditation:(nonnull LaunchMeditationIntent *)intent
                                  withCompletion:(nonnull void (^)(INStringResolutionResult * _Nonnull))completion {
  completion([INStringResolutionResult successWithResolvedString:intent.meditationName]);
}
@end

Когда я тестирую расширение Intents, Теперь я могу создать для него ярлык в «Ярлыках», установить его параметр, дать ему имя (например, «время на пляже») и запустить его, сказав Siri это имя - это все, что я не хочу пользователи должны сделать.

Кроме этого, Siri отвечает:

Медитации не добавили поддержку этого с Siri.

… нет Независимо от того, как я формулирую свою просьбу начать Beach Sunset . То, что «не добавил поддержку» звучит мучительно, как будто я просто чего-то упускаю.

1 Ответ

1 голос
/ 21 февраля 2020

Я постараюсь кратко ответить на все ваши вопросы.

  • Вы не можете создать действие Siri, не жертвуя действия. Как только вы пожертвуете свои действия, они также не будут зарегистрированы в Siri. Чтобы их использовать, пользователи должны создать ярлык.
  • Следующее, что вы можете сделать, это сообщить своим пользователям о ярлыках Siri. Для этого вы можете показать всплывающее окно или проинформировать своих новых пользователей о появившихся экранах. Хорошая часть заключается в том, что вы можете перенаправить своих пользователей на экран «Создание ярлыка Siri» с помощью этого кода, который можно вызвать нажатием кнопки или касанием.
let shortcut = INShortcut(userActivity: shortcutActivity!) // shortcutActivity is your donated activity.          
let vc = INUIAddVoiceShortcutViewController(shortcut: shortcut)
vc.delegate = self // INUIAddVoiceShortcutViewControllerDelegate
self.present(vc, animated: true, completion: nil)
  • Ярлыки необходимы для Siri, чтобы быть в курсе вашей реализации.
  • Насколько я знаю, домены намерений помогают вам указать больше параметров для ваших ярлыков Siri. Что позволяет создавать больше взаимодействий Siri.
  • Apple также продвигает ярлыки Siri для часто используемых приложений. Если ваши пользователи используют ваше приложение на регулярной основе или чаще, чем другие, они могут увидеть предложение быстрого доступа Siri на своем главном экране. Похоже на это один .

Я также думаю, что было бы здорово пожертвовать Siri Shortcuts без каких-либо действий пользователя, но были бы определенные проблемы, такие как:

  • Что если два или более разных приложения используют та же фраза для ярлыка Siri?
  • Как Siri будет отличать guish незарегистрированную команду от простого разговора? Например, если кто-то создал ярлык с фразой «Привет, Сири».
  • Даже если вы подарите действие с определенной фразой, Сири должна узнать, как пользователь произносит эту фразу.

Это может принести больше вреда, чем пользы, поэтому я думаю, что Apple выберет текущий путь. Надеюсь, что эти ответы отвечают на ваши вопросы.

...