寄付窓口はこちら

Siri ShortcutsとNSUserActivityによるエンゲージメント推進 | try! Swift Tokyo 2019 1-15

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

f:id:niwatako:20190321170637j:plain

NSUserActivityの話です。

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

Siriって素晴らしいテクノロジー

f:id:niwatako:20190321170734j:plain

f:id:niwatako:20190321170741j:plain

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

f:id:niwatako:20190321170828j:plain

NSUserActivityを使う

f:id:niwatako:20190321170901j:plain

Let them say 。。。ぜひスライド探して呼んでください

インスタンスを渡しコマンドを渡しアクションを処理する

f:id:niwatako:20190321170958j:plain

f:id:niwatako:20190321171006j:plain

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

f:id:niwatako:20190321171102j:plain

f:id:niwatako:20190321171124j:plain

f:id:niwatako:20190321171130j:plain

呼び出しフレーズを録音したら呼び出せるように成る。

改善していきます

f:id:niwatako:20190321171153j:plain

import Intents

f:id:niwatako:20190321171215j:plain

You can say something...

もう一つできることがあります

f:id:niwatako:20190321171236j:plain

spotlight Serchに対応

f:id:niwatako:20190321171256j:plain

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

f:id:niwatako:20190321171303j:plain

CoreSpotlight, CoreServices

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

f:id:niwatako:20190321171347j:plain

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

f:id:niwatako:20190321171358j:plain

そこまでが1つ目

f:id:niwatako:20190321171419j:plain

それではステップ2

f:id:niwatako:20190321171434j:plain

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

f:id:niwatako:20190321171530j:plain

f:id:niwatako:20190321171542j:plain

f:id:niwatako:20190321171547j:plain

他のUIButtonと同じように設定できた

ViewControllerを設定していく

f:id:niwatako:20190321171612j:plain

f:id:niwatako:20190321171641j:plain

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

f:id:niwatako:20190321171655j:plain

以上がStep2、ちょっとコードを上手く書くことでできる。

Siriからショートカットがアクティベートされたら呼ばれるがアプリはその制御がわからない

Siriからの指示を受け取れるようにする

f:id:niwatako:20190321171730j:plain

2つの主なやり方があります。アプリを閉じていたら起動する必要がある。

AppDelegateに行きます。IntentをStoreし、Viewcontrollerが起動したらその値をチェックする

アプリがすでに起動されている場合には通知をトリガーに、すでにViewControllerがうごいていて、受け取る

f:id:niwatako:20190321171828j:plain

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

f:id:niwatako:20190321171837j:plain

このactivityを初期化するのに使ったものと同じもののTypeが入っている

後はアクションするだけ

f:id:niwatako:20190321171915j:plain

f:id:niwatako:20190321171940j:plain

Siriがショートカットを意識できるようにしなければいけません。

Activityが戻ってきたときに使う

私が推奨するのはManagerクラスを使うことです

f:id:niwatako:20190321172014j:plain

チェックをして、起動したときにどうだったかを確認できる。

アプリケーションが既に動いていたらトリガーさせたい。

そこで数行のコード、AppDelegateをとってManagerを実装できます

f:id:niwatako:20190321172045j:plain

f:id:niwatako:20190321172050j:plain

2つのやり方をクリアしました

それではViewControllerに入ります

f:id:niwatako:20190321172111j:plain

f:id:niwatako:20190321172135j:plain

セーブしたIntentがローカルの文字列に一致するかチェックする。

矛盾する指示がないようにする。

f:id:niwatako:20190321172243j:plain

f:id:niwatako:20190321172246j:plain

いくつかの条件があります。奇妙な点を意識しなければなりません。

開発時にはNSUserActivity.deleteAllSavedUserActivitiesを使う。

f:id:niwatako:20190321172334j:plain

Siriは変なキャッシングをします。本番のときは外しましょう。

次に、すべてのショートカットにはアクセスできません。

f:id:niwatako:20190321172400j:plain

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

f:id:niwatako:20190321172433j:plain

おさらいします

f:id:niwatako:20190321172451j:plain

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

f:id:niwatako:20190321172456j:plain

f:id:niwatako:20190321172509j:plain

f:id:niwatako:20190321172534j:plain