GameWithのiOSアプリエンジニアの chuymaster です!会社ではチャイと呼ばれています。インドのミルクティーのアレです。
今回はGameWithアプリに、Siri Shortcutsっていう機能を実装したので、その裏話を話したいと思います!
Siri Shortcutとは
Siri ShortcutsはiOS 12からできた機能で、Siriを通して音声でいろいろなアクションをさせることができる機能です。

実装がとても簡単で、Siriだけではなく、Spotlight検索からもアクションを出現させることができて、アプリの露出を増やすのに役に立つ機能です。
また、頻繁にアクションが行われると、検索するまでもなく、Spotlightを出したときやロックスクリーンにショートカットが出現するので、アプリの起動回数アップも狙えます。
Siri Shortcutsの最小実装方法
Siri Shortcuts用のこんなクラスを作りました。
class SiriShortcutsService { static func createActivity(activityType: String, title: String, keywords: Set<String> = [], contentDescription: String = "", suggestedInvocationPhrase: String = "") -> NSUserActivity { // NSUserActivityを作成して付帯情報を設定 let activity = NSUserActivity(activityType: activityType) activity.title = title activity.keywords = keywords let searchItemAttributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeItem as String) searchItemAttributeSet.title = title searchItemAttributeSet.contentDescription = contentDescription activity.contentAttributeSet = searchItemAttributeSet // Spotlight検索とSiri Shortcutsを有効化 activity.isEligibleForSearch = true if #available(iOS 12.0, *) { activity.isEligibleForPrediction = true activity.persistentIdentifier = activityType activity.suggestedInvocationPhrase = suggestedInvocationPhrase } return activity } }
これで、Siriに登録するショートカットを作成できます。 ショートカットの付帯情報はコードから分かるように
- title: タイトル
- keywords: 検索キーワード
- contentDescription: ショートカットの説明
- suggestedInvocationPhrase: Siriで起動するフレーズの提案
が設定できます。
次にショートカットを ViewController で登録する必要があります。
override func viewDidLoad() { super.viewDidLoad() userActivity = SiriShortcutsService.createActivity(activityType: "jp.co.gamewith.xxxxxx", title: "モンストのマルチに参加", keywords: ["モンスト", "マルチ", "モンスターストライク"], contentDescription: "モンスターストライクのマルチ募集中のクエストに参加できます") userActivity?.becomeCurrent() }
ViewController が持っている userActivity プロパティにショートカットを設定し、
userActivity?.becomeCurrent() を呼ぶことでショートカットを登録します。これで登録完了です。
ここで登場した activityType パラメータは、ショートカットごとに一意の文字列を設定します。
Siri Shortcutsでアプリが起動された際のハンドリングするための認識記号として持ちます。
ハンドリング処理は、 AppDelegate の application(_:continueUserActivity:restorationHandler:) でこのようにします。
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool { // activityTypeの文字列を取得 switch userActivity.activityType { case "jp.co.gamewith.xxxxxx": // モンストのマルチ参加画面を開く Route.multiParticipate() return true default: return false } }
留意点
Siri Shortcutsはあくまでも、ユーザーがよく使っているアクションを登録して、簡単に呼び出せるようにする機能なので、 実際にそのアクションをしたときにショートカットを追加するのがAppleのガイドラインに沿って適切です。
Don’t make donations for actions that the user has not completed in your app; if the user never places an order for soup, you should never donate a shortcut for the order soup action.
Donating Shortcuts | Apple Developer Documentation
Siriへの登録方法
GameWithアプリのモンスト攻略にはマルチ掲示板機能があり、 そこでマルチ募集かマルチ参加をした方なら、Siri Shortcutsを使うことができます。
まずは設定を開く

Siriと検索を選ぶ

GameWithを選ぶ

ショートカットを選ぶ

使えるショートカット一覧から、「モンストのマルチに参加」を選ぶ

Siriで起動するフレーズを登録する

「マルチ参加」で登録したショートカットが表示される

Siriに「マルチ参加」と話しかける

GameWithアプリのモンストマルチ掲示板が起動する

Spotlightからもショートカットが出現するようになる

実装した結果
Siri Shortcutsをリリースして1週間経ったとき
ショートカットを経由してアプリを起動してくれたユーザーがなんと・・・
・・・
・・
・
40名弱いました!
Siri経由とSpotlight経由を含めた数字です。
アプリの利用者の数から考えると、とてつもなく少ないです。
あまり普及しないSiriを使う機能なので、利用者が少ないのは予想通りとはいえ、少し凹みました(笑)
しかし、GameWithが掲げるビジョン「世界のゲームインフラになる」を実現するには、 こうしたユーザー体験の改善を地道に積み上げることが必要であり、 今後も試行錯誤しながらサービスを作っていきたいと思います。
最後に
社内では、Siriのことをもっと勉強して、Intentsという機能でSiriと会話して何かできないかも検証しています。
Siri Shortcutsのように、新しい技術をエンジニアから積極的に提案して実装できるのも、GameWithの社風ならではです。
そんなGameWithは、ゲームが大好きで、新しい技術をどんどん使っていきたいという方を大募集中!
Wantedly でもよいので是非お気軽にお声がけください!