NSUserActivityは、開発者がデバイス上でのアプリの可視性を高めることができるとても強力なツールです。 Siri Shortcutsの導入により、アプリの機能とのエンゲージメントがこれまで以上に簡単になりました。 SiriKitの自動音声起動機能を追加して、ユーザーのアプリ体験をさらに楽しくする方法を探ります。

NSUserActivityの話です。
このタイトルをみて分かると思いますが


反復操作に簡単にアクセスできるようにする。色々なアクションがユーザーに寄っては変わる。エンゲージメントも楽になる。タップ、あるいはボイスコマンドで直接飛べるように成る。

NSUserActivityを使う

Let them say 。。。ぜひスライド探して呼んでください
インスタンスを渡しコマンドを渡しアクションを処理する


Stringでイニシャライズします、カスタマイズは最小限、タイトルを付ける。2つ重要なステップ。isEligibleForPredictionをtrueにするのと、self.userActivityにいれる



呼び出しフレーズを録音したら呼び出せるように成る。
改善していきます

import Intents

You can say something...
もう一つできることがあります

spotlight Serchに対応

あとふたつ重要なものをimport する

CoreSpotlight, CoreServices
ContentDescription, Thumbnail、ショートカットをユニークに感じてもらうため

少しユニークになりました

そこまでが1つ目

それではステップ2

IntentsUIフレームワークで、INUIAddVoiceSurtcutButton, INUIAddVoiceSurtcutViewController



他のUIButtonと同じように設定できた
ViewControllerを設定していく


アプリを離れず設定できる

以上がStep2、ちょっとコードを上手く書くことでできる。
Siriからショートカットがアクティベートされたら呼ばれるがアプリはその制御がわからない
Siriからの指示を受け取れるようにする

2つの主なやり方があります。アプリを閉じていたら起動する必要がある。
AppDelegateに行きます。IntentをStoreし、Viewcontrollerが起動したらその値をチェックする
アプリがすでに起動されている場合には通知をトリガーに、すでにViewControllerがうごいていて、受け取る

起動させなければならない場合に、userActivityDictionaryの中身を確認する

このactivityを初期化するのに使ったものと同じもののTypeが入っている
後はアクションするだけ


Siriがショートカットを意識できるようにしなければいけません。
Activityが戻ってきたときに使う
私が推奨するのはManagerクラスを使うことです

チェックをして、起動したときにどうだったかを確認できる。
アプリケーションが既に動いていたらトリガーさせたい。
そこで数行のコード、AppDelegateをとってManagerを実装できます


2つのやり方をクリアしました
それではViewControllerに入ります


セーブしたIntentがローカルの文字列に一致するかチェックする。
矛盾する指示がないようにする。


いくつかの条件があります。奇妙な点を意識しなければなりません。
開発時にはNSUserActivity.deleteAllSavedUserActivitiesを使う。

Siriは変なキャッシングをします。本番のときは外しましょう。
次に、すべてのショートカットにはアクセスできません。

Hey Siri, 登録したショートカットを全部教えて、ということは出来ない。

おさらいします

それではぜひ追加してください



