私たちはプログラマとして、自分たちの製品のプロモーションに興味を持ち、ユーザには簡単で楽しい経験をしてほしいと考えています。それでもApp Storeには毎日無数の新しいアプリが登場し、ユーザが私たちのアプリをダウンロードしても、デバイス上の数十ものアプリの中で見失われる可能性があります。しかし当然ながら、ユーザが私たちのプロダクトを忘れずに定期的かつ積極的に使うことを望んでいます。私たちは多くのトリックや技を使えます。そのうちの1つはApp Indexing機能で、Zalandoで積極的に使っています。それは素晴らしい結果を示して見事に機能し、SpotlightやWebでアプリをより使いやすく、認識しやすくしました。この講演では、ZalandoのiOSアプリでApp Search機能をどのように使っているのかを説明し、さまざまなタイプのコンテンツ向けのApp Search機能を紹介し、経験と実例を共有します。私たちのさまざまなアプローチを示すことで、開発者が私たちのミスを防ぎ、成果をもたらしてほしいと考えています。
iOSにおけるDocument IndexingとApp Search

アプリの検索をiOSでやる話をします。
新しいことでは無いですが面白いことが起きているので共有します。

まだ6万アプリぐらいしか利用していません。

今日は活用のインスピレーションを与えられればと思います。

カタログアイテムをインデックス化したい場合


期間限定SaleならexpirationDateを設定します。
attributeSetはCoreSpotlightの中でアイテムを可視化します。
domainIdentifierを使えば春物を一斉削除したり出来ます。
ExtensionでIndexingのバックグラウンド処理も可能です。

コンテンツは最新版にしておきましょう。

事例はGithubに載っています。

この機能はiOS10以降です。Spotlightから検索をアプリ内へ継続させることが出来ます。

10項目ぐらいしか表示できませんでしたが、iOS10からはこうなります。


アプリ内へ入って続きを見ることが出来る

バックグラウンドのバッチはバッチの開始と終了の宣言、そしてスレッド処理を自分で管理します。

トリガーはデベロッパー設定へ行きます。AllIdentifier?を設定するとExtensionを呼び出してくれる。

itemはどのようにSpotlightで見えるかということだけに責任を持ちます。

注意いただきたいのはシミュレーターでは機能しません。矢印などの挙動はリアルデバイスを利用して確認します。

supportsPhoneCallやsupportsNavigaionをtrueにすると、位置情報などは提供されないので検索結果に出なくなります。

NSUserActivityは見えるものです。publicに定義するとクラウドに表示されます。ユーザーがアプリケーションを持っていなくてもSpotlightに表示され、タップするとアプリをダウンロードできる。

NSUserActivityのプロパティはSearchableItemとほとんど変わりません。
スクリーンをアプリケーションでWebページと同じものにすることが出来ます。

以前は削除ができませんでしたが可能になりました。



アクティビティを作るとイニシャライザが必要になります。ActivityをInitializerを作っても機能しないんです。イニシャライズしてからプロパティを設定する必要があります。

クローラーがWebPageでインデックスされているかを確認するとわかると思います。


SearchableItemとActivity
スクリーンに影響を及ぼします、常に見えるようになっていなければなりません。

対応するWebサイトがなければ使う理由はありません。常にPublicです。Appleのクローラーがクローリングします。クローリングを確認する方法はありません。
Deeplinksを加え、robots.txtに加える。マークアップでリッチインフォメーションを加える。


UniversalLinkはWebサイトから直接アプリを開きます。使うためにはFQDNを加えて下さい

機能するかどうかを確認することが出来ます。ユーザーの選択を記憶します。

以前はwildcardで対応していました すべてのリンクに対応して欲しい時、ユーザーに関連するものだけを使いたい時、リダイレクトではなくWebにリダイレクトしたい時。

Notを使って下さい。リダイレクトされないようにします。
ワイルドカードの前に記述する必要があります。

他のWebサイトのコンテンツからリダイレクト出来るのか
これは出来ません。メタデータを特定する必要があります。

- アプリケーションへのアクセスが早まる
- SpotlightのTopResultに表示される
- ユーザーエンゲージメントが高まる
- プロモーションにも使える
- ユーザーがWebを使いたくない時にアプリにリダイレクト出来る。

Githubのリンクを用意していますので使ってみて下さい。
Q&A
Indexingを様々なイメージとリンクする時どうしたら良いのでしょうか。Imageをまずダウンロードしなければいけません。どんなイメージを使う必要があるでしょうか、イメージを保存しておく必要があるのでしょうか。
Indexしたら保存しておく必要はありません。開く時に取得すればいい。 ちさなアイコンで見せたいときはプロパティに設定します。勝手に縮小してくれるのでJobは発生しません。
画像そのものをIndexingでSaveする必要はありません。
ImageのShapeが違うように見えた。四角ではなく少し長くなって見えた。これが推奨ですか?
そういうわけではありません。まずイメージが有りますね、カタログのような。イメージの中で馬に乗る女性があるとすると、女性と馬のキーワードを登録する。 検索結果から開いたアイテムが分かるのでDBから取る
Spotlightを実際のアプリでどれくらい使っていますか
統計的に何人ぐらいが利用しているか、それは難しいですね。例えば今のところは50%ぐらいのお客様がSpotlightから来ている。
データ自体は魅力的だと思う。データは冗長されていますか?インデックスをするのか大きなストアに持たせるのか データの失効は有効期限は付けていますか
有効期限を付けておくとインデックス化で自動で削除されます。更新もあとからできます。 あとから期限を定めても良い
APIコールでペンと検索する時、データはIndexに置くのでしょうか
IDなどがもらえるので、Index済みかどうか確認することが出来ます。
