Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Hello App Indexing
Search
ymnder
June 23, 2017
Programming
1
430
Hello App Indexing
Otemachi.Firebase#2 2017/6/23
ymnder
June 23, 2017
Tweet
Share
More Decks by ymnder
See All by ymnder
What’s new in Google Play's billing system
ymnder
1
280
Deep Linksをはじめよう
ymnder
0
360
Introduction to Wear OS Application Development
ymnder
0
490
CircleCIを使ったAndroidの開発フローの効率化とtips
ymnder
1
1.3k
Introduction to new features of Google Play Billing
ymnder
2
290
運用から学ぶPlay Billing Library
ymnder
2
730
What’s new in Google Play Billing v1.2
ymnder
0
690
詳解定期購入
ymnder
7
6.2k
社内向けライブラリを設計・運用する話
ymnder
0
1k
Other Decks in Programming
See All in Programming
個人アプリを2年ぶりにアプデしたから褒めて / I just updated my personal app, praise me!
lovee
0
350
sappoRo.R #12 初心者セッション
kosugitti
0
260
SpringBoot3.4の構造化ログ #kanjava
irof
2
1k
苦しいTiDBへの移行を乗り越えて快適な運用を目指す
leveragestech
0
630
昭和の職場からアジャイルの世界へ
kumagoro95
1
380
2024年のWebフロントエンドのふりかえりと2025年
sakito
3
250
負債になりにくいCSSをデザイナとつくるには?
fsubal
10
2.4k
1年目の私に伝えたい!テストコードを怖がらなくなるためのヒント/Tips for not being afraid of test code
push_gawa
0
200
Spring gRPC について / About Spring gRPC
mackey0225
0
220
pylint custom ruleで始めるレビュー自動化
shogoujiie
0
120
チームリードになって変わったこと
isaka1022
0
200
さいきょうのレイヤードアーキテクチャについて考えてみた
yahiru
3
750
Featured
See All Featured
The Cult of Friendly URLs
andyhume
78
6.2k
Thoughts on Productivity
jonyablonski
69
4.5k
Scaling GitHub
holman
459
140k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
The Pragmatic Product Professional
lauravandoore
32
6.4k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Unsuck your backbone
ammeep
669
57k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.6k
Rails Girls Zürich Keynote
gr2m
94
13k
Transcript
Hello App Indexing :) 2017/6/23 Otemachi Firebase #2
whoami Ryo Yamazaki / Application Engineer twitter: @ymnd github: @ymnder
2
product: Android App 3
topics ᶃ What’s App Indexing ᶄ Hello App Indexing ᶅ
App Indexing: Pros/Cons 4
topics ᶃ What’s App Indexing ᶄ Hello App Indexing ᶅ
App Indexing: Pros/Cons 5
What’s App Indexing 6
What’s App Indexing • Google ݕࡧͱ࿈ܞͯ͠ɺϢʔβʔͷϦϐʔτΛ্ ͤ͞Δ • ChromeGoogle Search
Appͷݕࡧ݁Ռ͔ΒΞϓ ϦʹભҠͰ͖Δ • ϢʔβʔʹΠϯετʔϧޙʹ࠶Ξϓϩʔν͢Δ͜ͱ͕Ͱ ͖Δ
Where can I see it: demo
Where can I see it • Chrome • Google Search
App • Google Assistant
Why App Indexing
Why App Indexing
Why App Indexing
͔ͤͬͭͬͨ͘͘ͷʹ ͔ͭͬͯΒ͑ͳ͍
ΞϓϦʹ࠶๚ͯ͠ཉ͍͠ʂʂ
App Indexing
Who is the target • ΞϓϦΛΠϯετʔϧ͚ͨ͠ͲɺΘͳ͘ͳͬͯ͠·ͬ ͨϢʔβʔɿre-engage • ࠓ͍ͬͯΔϢʔβʔɿmore-engage •
(ΞϓϦΛΠϯετʔϧ͍ͯ͠ͳ͍Ϣʔβʔ)
How effective is that? Case study: g.co/AppIndexing
Which device does it work? • ChromeΛΠϯετʔϧ͍ͯ͠Δ • API 14Ҏ্Ͱಈ͘͜ͱΛ֬ೝࡁΈ
• Search AppΛΠϯετʔϧ͍ͯ͠Δ • ҙɿAPI 16Ҏ্Ͱͳ͍ͱΠϯετʔϧͰ͖ͳ͍ • Google Assistant͕͑Δ • API 23Ҏ্Ͱ͑ΔΑ͏ʹͳͬͨ
topics ᶃ What’s App Indexing ᶄ Hello App Indexing ᶅ
App Indexing: Pros/Cons 19
Hello App Indexing :) • App Indexing • WebαΠτʹΞϓϦͷdeeplinkΛઃஔ •
αΠτΛ։͍ͨͱ͖ʹΞϓϦ͕։͘ • App Indexing API • ΦʔτίϯϓϦʔτ • Google Search Appͷݕࡧ݁ՌʹաڈӾཡͨ͠Ξϓ Ϧͷϖʔδ͕දࣔ͞ΕΔ • ΩʔϫʔυͰΞϓϦͷϖʔδΛҾֻ͚ͬΒΕΔ
Hello App Indexing :) • App Indexing • WebαΠτʹΞϓϦͷdeeplinkΛઃஔ •
αΠτΛ։͍ͨͱ͖ʹΞϓϦ͕։͘ • App Indexing API • ΦʔτίϯϓϦʔτ • Google Search Appͷݕࡧ݁ՌʹաڈӾཡͨ͠Ξϓ Ϧͷϖʔδ͕දࣔ͞ΕΔ • ΩʔϫʔυͰΞϓϦͷϖʔδΛҾֻ͚ͬΒΕΔ
Hello App Indexing :)
Hello App Indexing :) • App Indexing • WebαΠτʹΞϓϦͷdeeplinkΛઃஔ •
αΠτΛ։͍ͨͱ͖ʹΞϓϦ͕։͘ • App Indexing API • ΦʔτίϯϓϦʔτ • Google Search Appͷݕࡧ݁ՌʹաڈӾཡͨ͠Ξϓ Ϧͷϖʔδ͕දࣔ͞ΕΔ • ΩʔϫʔυͰΞϓϦͷϖʔδΛҾֻ͚ͬΒΕΔ
Hello App Indexing API :)
App Indexing
Hello App Indexing :) • Δ͜ͱͨͬͨ̏ͭ ᶃαΠτʹΞϓϦΛඥ͚Δ ᶄϝλλάΛαΠτʹࠐΉ ᶅΞϓϦʹDeeplinkΛಡΈࠐΉ࣮Λ͍ΕΔ
How to connect with your site: web side • HTTPSͷ߹
& Android SDK Platform 23 or higher • Digital Assets Links • https://<yoursite>/.well-known/assetlinks.json
How to connect with your site: web side • HTTPͷ߹
• Search ConsoleͰWebͱΞϓϦΛඥ͚Δ • WebͱAppΛҧ͏ΞΧϯτͰཧͯͯ͠େৎ
Play Console
How to connect with your site: web side • αΠτʹmetaλάΛՃ͢Δ
• custom URLඇਪ͕ͩ͑Δ package_id scheme host
How to connect with your site: app side
How to connect with your site: app side
How to connect with your site: app side
How to connect with your site: app side https://developer.android.com/guide/topics/manifest/data-element.html
How to connect with your site: app side @Override protected
void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_recipe); onNewIntent(getIntent()); } protected void onNewIntent(Intent intent) { String action = intent.getAction(); String data = intent.getDataString(); if (Intent.ACTION_VIEW.equals(action) && data != null) { //write wonderful codes… } }
How to connect with your site: app side @Override protected
void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_recipe); onNewIntent(getIntent()); } protected void onNewIntent(Intent intent) { String action = intent.getAction(); String data = intent.getDataString(); if (Intent.ACTION_VIEW.equals(action) && data != null) { //write wonderful codes… } }
How to connect with your site: app side @Override protected
void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_recipe); onNewIntent(getIntent()); } protected void onNewIntent(Intent intent) { String action = intent.getAction(); String data = intent.getDataString(); if (Intent.ACTION_VIEW.equals(action) && data != null) { //write wonderful codes… } }
How do I test app indexing • manifestͷهड़͕߹͍ͬͯΔ͔ • Android
StudioɿAnalyze -> Inspect Code • intentਖ਼͘͠௨Δ͔ • adb shell am start -a android.intent.action.VIEW -d "{URL}" {package name} • WebʹmetaλάࠐΜͩͷʹಈ͔ͳ͍ • Google searchͷfetch as googleͰ࠶Ϋϩʔϧ • ͔ͯ͠͠ɺඥ͍ͯͳ͍ϦϯΫΛ։͍ͯΔʁ
Fetch as Google
Check Before Launch • First Click Free • ΫϦοΫͨ͠ઌͦͷ··ίϯςϯπΛݟΒΕΔΑ ͏ʹ
• BackButton • ̍ͭલͷεΫϦʔϯʹΔΑ͏ʹ͖͢
App Indexing API
App Indexing API is updated…….. • 10.0.0͔ΒAPI͕େ͖͘มߋ͞Εͨ • codelabs •
ҙ • ຊޠͷget started ߋ৽͞Εͯͳ͍ • https://firebase.google.com/docs/app-indexing/ android/migrate
App Indexing API is updated……. • GoogleApiClientΛΘͳ͘ͳͬͨ • ΦʔτίϯϓϦʔτʹ͏ϢʔβʔΞΫγϣϯͷϏϧυ Ϋϥε͕γϯϓϧʹͳͬͨ
• ϢʔβʔΞΫγϣϯͷߋ৽ํ๏͕มΘͬͨ • ΠϯσοΫεʹΞΫγϣϯ͕Ճ͞Ε͍ͯΔ͜ͱΛ֬ ೝ͔ͯ͠ΒΞοϓσʔτΛߦ͏
App Indexing API is updated…… // Before import com.google.android.gms.appindexing.Action; import
com.google.android.gms.appindexing.AppIndex; import com.google.android.gms.common.api.GoogleApiClient; // After import com.google.firebase.appindexing.Action; import com.google.firebase.appindexing.FirebaseUserActions; import com.google.firebase.appindexing.Indexable; import com.google.firebase.appindexing.builders.Actions;
App Indexing API is updated….. // Before import com.google.android.gms.appindexing.Action; import
com.google.android.gms.appindexing.AppIndex; import com.google.android.gms.common.api.GoogleApiClient; // After import com.google.firebase.appindexing.Action; import com.google.firebase.appindexing.FirebaseUserActions; import com.google.firebase.appindexing.Indexable; import com.google.firebase.appindexing.builders.Actions;
App Indexing API is updated…. //Before public Action getAction() {
Thing object = new Thing.Builder() .setName(mText) .setUrl(mUrl) .build(); return new Action.Builder(Action.TYPE_VIEW) .setObject(object) .build(); } // After public Action getAction() { return Actions.newView(mText, mUrl); }
App Indexing API is updated… //Before public Action getAction() {
Thing object = new Thing.Builder() .setName(mText) .setUrl(mUrl) .build(); return new Action.Builder(Action.TYPE_VIEW) .setObject(object) .build(); } // After public Action getAction() { return Actions.newView(mText, mUrl); }
App Indexing API is updated.. //Before @Override protected void onStart()
{ super.onStart(); mClient.connect(); AppIndex.AppIndexApi.start(mClient, getAction()); } @Override protected void onStop() { AppIndex.AppIndexApi.end(mClient, getAction()); mClient.disconnect(); super.onStop(); }
App Indexing API is updated. // After @Override protected void
onStart() { super.onStart(); FirebaseAppIndex.getInstance().update(getIndexable()); FirebaseUserActions.getInstance().start(getAction()); } @Override protected void onStop() { FirebaseUserActions.getInstance().end(getAction()); super.onStop(); }
Codelabs • https://codelabs.developers.google.com/codelabs/app-indexing/#0
topics ᶃ What’s App Indexing ᶄ Hello App Indexing ᶅ
App Indexing: Pros/Cons 51
App Indexing: Pros • ΞϓϦͷ࠶๚ͷػձ͕૿ͤΔ • Google AssistantͰߋʹ৮ػձ͕૿͑ΔՄೳੑ͕ʁ • ΞϓϦΛͬͯΒ͏ػձ૿ͤΔ
• ΞϓϦͰ࠷ߴͷମݧΛ
App Indexing: Pros • ϞόΠϧͷݕࡧϥϯΩϯάΞϧΰϦζϜʹӨڹ • ܭଌͷڧԽ • ϞόΠϧαΠτ๚ऀͷΞϓϦΠϯετʔϧਪܭ •
SearchConsole
App Indexing: Cons • ΞϓϦΛΠϯετʔϧͯ͠ͳ͍ͱભҠ͠ͳ͍ • re-engageࢪࡦ • fallbackͳ͍ •
Πϯετʔϧಋઢ૿͑Δ͚Ͳɾɾɾ • Կނ͔ΞϓϦ͕։͔ͳ͍߹͕͋Δ • өʹϥά͕͋Δ
App Indexing: Cons • ChromeʗSearchAppҎ֎ͰӾཡͨ͠߹ભҠ͠ͳ͍ • twitter: App Card, facebook:
App Links
Grow App with App Indexing
͓ΘΓ
References http://qiita.com/mmusasabi/items/fd35037aecc1772dd11b http://qiita.com/nein37/items/3b69f85b97d0883eb1ca http://inside.pixiv.net/entry/2014/12/15/152113 http://stpsysdev.blogspot.jp/2016/02/androidappindexing.html https://www.youtube.com/watch?v=CwgWOHgHHJE https://www.youtube.com/watch?v=pl1-m8tJDmQ http://thebridge.jp/2015/11/what-is-appindexing https://realm.io/news/juan-gomez-android-app-indexing/ http://www.slideshare.net/wjarek/an-introduction-to-deep-linking-and-app-indexing-codelab
http://stackoverflow.com/questions/31512465/app-indexing-with-ampersand-in-deep-link-not-working https://productforums.google.com/forum/#!topic/webmaster-ja/HdEAWX-YbsE;context-place=topicsearchin/ webmaster-ja/category$3Aapp-indexing%7Csort:relevance%7Cspell:false
References • First Click Free • https://support.google.com/news/publisher/answer/ 40543?hl=ja • https://productforums.google.com/forum/#!topic/
webmaster-ja/TRvgIx3Sr2k;context- place=topicsearchin/webmaster-ja/category$3Aapp- indexing • BackButton • https://webmasters.googleblog.com/2014/04/app- indexing-updates.html