Created
June 20, 2018 11:35
-
-
Save niwatako/c4e2029cb7056d2601b2e864415e2d38 to your computer and use it in GitHub Desktop.
『音楽サービス開発者から見たSiri Shortcuts』 #CodePiece #ca_swift
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CA.swift #6 WWDC18 報告会 - connpass | |
https://cyberagent.connpass.com/event/88328/ | |
## 『音楽サービス開発者から見たSiri Shortcuts』 | |
岐部 龍太 | |
`iOS12ではSiriがSpotifyなど他社音楽アプリをサポートできる、デベロッパのやる気次第で` | |
どこまでできるのか? | |
Apple Musicのようにアプリを起動していない状態から音楽を再生するのをゴールに設定してやってみた。 | |
Siriに「XXX(アーティスト名)を再生して」というと再生してくれる。 | |
beryu/SiriShortcutsSample | |
https://github.com/beryu/SiriShortcutsSample | |
SiriShortcutsにはNSUserActivityとIntentを使う方法がある | |
### NSUserActivity を使う方法 | |
INShortcutを定義してINShortcutをMyShortcutに登録する。そのためにNSUserActivityを作る。これは今までどおり。 | |
NSUserActivitiのuserInfoに好きな値をセットできるので曲名やURLをセットします。 | |
新しいのは NSUserActivityの .isEligibleForPrediction と .suggestedInfocationPhrase(せっていしなくてもいいけどユーザーの混乱をさける)プロパティ。 | |
このActivityをINShortcutに渡して内包するような形になる。 | |
INUIAddVoiceShortcutViewController に INShortcut を渡すと、あとはOSお任せで、登録できる機能が提供される。 | |
shortcut渡して生成して、Delegateして表示。delegateは登録完了とキャンセルをさばく、つまりそれぞれでdismissするだけ。 | |
呼び出されたら | |
SiriからMyShortcutを呼び出すとアプリが呼ばれる。このフローはやることがない。 | |
AppDelegateで待っておいて、そこで音楽を再生する処理を書いておけば良い。 | |
目的のアクティビティが来たら、情報を取り出して再生する。 | |
#### Demo | |
"ヒカリを再生して" で登録して、宇多田ヒカルが再生できるかな? | |
回線が混んでいてSiriの解析に時間がかかる。仕方がないので設定で手入力を有効にしてみる。 | |
アプリが起動して、再生されました!成功! | |
でも、AppleMusicではアプリは起動しないですね | |
NSUserActivityではアプリが起動してしまう。 | |
### Intent | |
IntentでのSiri制御は用意されてるIntentしか使えないけれど、iOS12から。メディア再生のIntent INPlayMediaIntentが登場したのでできるようになった。 | |
INShortcutをつくるのはさっきとほとんど同じ。 | |
INMediaItemを作ってIMPlayMediaIntentにいれて、それでINShortcutを作る。 | |
このINShortcutをINUIAddVoiceShortcutViewControllerにわたす。 | |
Siriから呼び出される先がAppDelegateではなくてIntentHandlerになるのがIntentの特徴。 | |
Intentの種類ごとに適切なIntentHandlerを返す。INPlayMediaIntentHandlingを実装する。 | |
返すHandlerには、さっき定義したIntentが渡ってきてハンドリングを求められる。 | |
ここはSiri表示中に実行されるところ。 | |
メソッドの最後にcompletionにResponseとして処理が成功したことなどを渡してあげることでSiriがユーザーに応答できる。 | |
回線混雑のためSiri利用できず。 | |
UIも作成して表示することができる。操作も受け付けられる。 | |
### 補足 | |
今回は用意されたIntentを使いましたが、 | |
独自のIntentを定義することもできる。Intent Definition。 | |
ある程度特殊な業務アプリなんかにも利用できそうです。 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment