Submit Search
Upload
インストールリファラでハマった話
•
1 like
•
2,651 views
shinya sakemoto
Follow
potatotips #6 で発表した内容。
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 19
Download now
Download to read offline
Recommended
Kifの紹介
Kifの紹介
Keita Otsuka
Travis CIで実現するPHPアプリの自動テスト
Travis CIで実現するPHPアプリの自動テスト
Yusuke Ando
PHPとTravis CIでブラウザテスト
PHPとTravis CIでブラウザテスト
Yusuke Ando
DevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニック
Yusuke Ando
Androidリリース作業の効率化(2)
Androidリリース作業の効率化(2)
Kenichi Kambara
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
Yuki Iwanari
Jenkins導入ライブ
Jenkins導入ライブ
Hiasyoshi Suehiro
Jenkinsを用いたAndroidアプリビルド作業効率化
Jenkinsを用いたAndroidアプリビルド作業効率化
Kenichi Kambara
Recommended
Kifの紹介
Kifの紹介
Keita Otsuka
Travis CIで実現するPHPアプリの自動テスト
Travis CIで実現するPHPアプリの自動テスト
Yusuke Ando
PHPとTravis CIでブラウザテスト
PHPとTravis CIでブラウザテスト
Yusuke Ando
DevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニック
Yusuke Ando
Androidリリース作業の効率化(2)
Androidリリース作業の効率化(2)
Kenichi Kambara
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
Yuki Iwanari
Jenkins導入ライブ
Jenkins導入ライブ
Hiasyoshi Suehiro
Jenkinsを用いたAndroidアプリビルド作業効率化
Jenkinsを用いたAndroidアプリビルド作業効率化
Kenichi Kambara
Azure boards for beginners
Azure boards for beginners
Kazushi Kamegawa
Deploy Strategy with Azure Pipelines
Deploy Strategy with Azure Pipelines
Kazushi Kamegawa
Azure DevOps ハンズオン Vo.3 ~Delivery Plans を用いたプロジェクトのスケジュール管理~
Azure DevOps ハンズオン Vo.3 ~Delivery Plans を用いたプロジェクトのスケジュール管理~
Takunori Minamisawa
Ltctjs
Ltctjs
Hisashi Aruji
DevOpsを実現する為のChef実践テクニック Chef12対応版
DevOpsを実現する為のChef実践テクニック Chef12対応版
Yusuke Ando
ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料
Go Sueyoshi (a.k.a sue445)
Azure DevOps's security
Azure DevOps's security
Kazushi Kamegawa
VS Code Remote Containersを使った Angular開発
VS Code Remote Containersを使った Angular開発
ShuheiHonma
Session8 - LabVIEW NXG Training Course
Session8 - LabVIEW NXG Training Course
Yusuke Tochigi
Blazor Web Assembly (C#) を触ってみた
Blazor Web Assembly (C#) を触ってみた
Naito Oshima
DOO-014_日本でもできる! マイクロソフト技術をフル活用した DevOps の具体的実現手法!
DOO-014_日本でもできる! マイクロソフト技術をフル活用した DevOps の具体的実現手法!
decode2016
DevOps and Compliance and Security
DevOps and Compliance and Security
Kazushi Kamegawa
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
aha_oretama
Seleniumのモバイル版「Appium」を使ってみた
Seleniumのモバイル版「Appium」を使ってみた
yamapy black
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
Study Group by SciencePark Corp.
Azure DevOps ハンズオン Vo.2 ~Azure DevOps Wiki を用いたドキュメントの作成~
Azure DevOps ハンズオン Vo.2 ~Azure DevOps Wiki を用いたドキュメントの作成~
Takunori Minamisawa
THETA S による身代わりテレビの実装(完結編)
THETA S による身代わりテレビの実装(完結編)
KatsuyaENDOH
Jenkinsユーザカンファレンス2015 前座資料
Jenkinsユーザカンファレンス2015 前座資料
ikikko
How to implement CI with OutSystems using Jenkins and BDD Framework
How to implement CI with OutSystems using Jenkins and BDD Framework
YutoMiyazaki
Team Foundation Serverで出てくるキーワード
Team Foundation Serverで出てくるキーワード
__Black
DroidKaigi2016 windows環境での効率的なアプリ開発手法
DroidKaigi2016 windows環境での効率的なアプリ開発手法
tkawashita
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Kengo Suzuki
More Related Content
What's hot
Azure boards for beginners
Azure boards for beginners
Kazushi Kamegawa
Deploy Strategy with Azure Pipelines
Deploy Strategy with Azure Pipelines
Kazushi Kamegawa
Azure DevOps ハンズオン Vo.3 ~Delivery Plans を用いたプロジェクトのスケジュール管理~
Azure DevOps ハンズオン Vo.3 ~Delivery Plans を用いたプロジェクトのスケジュール管理~
Takunori Minamisawa
Ltctjs
Ltctjs
Hisashi Aruji
DevOpsを実現する為のChef実践テクニック Chef12対応版
DevOpsを実現する為のChef実践テクニック Chef12対応版
Yusuke Ando
ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料
Go Sueyoshi (a.k.a sue445)
Azure DevOps's security
Azure DevOps's security
Kazushi Kamegawa
VS Code Remote Containersを使った Angular開発
VS Code Remote Containersを使った Angular開発
ShuheiHonma
Session8 - LabVIEW NXG Training Course
Session8 - LabVIEW NXG Training Course
Yusuke Tochigi
Blazor Web Assembly (C#) を触ってみた
Blazor Web Assembly (C#) を触ってみた
Naito Oshima
DOO-014_日本でもできる! マイクロソフト技術をフル活用した DevOps の具体的実現手法!
DOO-014_日本でもできる! マイクロソフト技術をフル活用した DevOps の具体的実現手法!
decode2016
DevOps and Compliance and Security
DevOps and Compliance and Security
Kazushi Kamegawa
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
aha_oretama
Seleniumのモバイル版「Appium」を使ってみた
Seleniumのモバイル版「Appium」を使ってみた
yamapy black
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
Study Group by SciencePark Corp.
Azure DevOps ハンズオン Vo.2 ~Azure DevOps Wiki を用いたドキュメントの作成~
Azure DevOps ハンズオン Vo.2 ~Azure DevOps Wiki を用いたドキュメントの作成~
Takunori Minamisawa
THETA S による身代わりテレビの実装(完結編)
THETA S による身代わりテレビの実装(完結編)
KatsuyaENDOH
Jenkinsユーザカンファレンス2015 前座資料
Jenkinsユーザカンファレンス2015 前座資料
ikikko
How to implement CI with OutSystems using Jenkins and BDD Framework
How to implement CI with OutSystems using Jenkins and BDD Framework
YutoMiyazaki
Team Foundation Serverで出てくるキーワード
Team Foundation Serverで出てくるキーワード
__Black
What's hot
(20)
Azure boards for beginners
Azure boards for beginners
Deploy Strategy with Azure Pipelines
Deploy Strategy with Azure Pipelines
Azure DevOps ハンズオン Vo.3 ~Delivery Plans を用いたプロジェクトのスケジュール管理~
Azure DevOps ハンズオン Vo.3 ~Delivery Plans を用いたプロジェクトのスケジュール管理~
Ltctjs
Ltctjs
DevOpsを実現する為のChef実践テクニック Chef12対応版
DevOpsを実現する為のChef実践テクニック Chef12対応版
ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料
Azure DevOps's security
Azure DevOps's security
VS Code Remote Containersを使った Angular開発
VS Code Remote Containersを使った Angular開発
Session8 - LabVIEW NXG Training Course
Session8 - LabVIEW NXG Training Course
Blazor Web Assembly (C#) を触ってみた
Blazor Web Assembly (C#) を触ってみた
DOO-014_日本でもできる! マイクロソフト技術をフル活用した DevOps の具体的実現手法!
DOO-014_日本でもできる! マイクロソフト技術をフル活用した DevOps の具体的実現手法!
DevOps and Compliance and Security
DevOps and Compliance and Security
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
Seleniumのモバイル版「Appium」を使ってみた
Seleniumのモバイル版「Appium」を使ってみた
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
Azure DevOps ハンズオン Vo.2 ~Azure DevOps Wiki を用いたドキュメントの作成~
Azure DevOps ハンズオン Vo.2 ~Azure DevOps Wiki を用いたドキュメントの作成~
THETA S による身代わりテレビの実装(完結編)
THETA S による身代わりテレビの実装(完結編)
Jenkinsユーザカンファレンス2015 前座資料
Jenkinsユーザカンファレンス2015 前座資料
How to implement CI with OutSystems using Jenkins and BDD Framework
How to implement CI with OutSystems using Jenkins and BDD Framework
Team Foundation Serverで出てくるキーワード
Team Foundation Serverで出てくるキーワード
Viewers also liked
DroidKaigi2016 windows環境での効率的なアプリ開発手法
DroidKaigi2016 windows環境での効率的なアプリ開発手法
tkawashita
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Kengo Suzuki
Master of Canvas
Master of Canvas
Mima Yuki
用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法
Takao Sumitomo
パーミッションモデルの過渡期への対応
パーミッションモデルの過渡期への対応
ak_shio_555
Android Dev Tools Knowledge
Android Dev Tools Knowledge
Shinobu Okano
怖くないGradle設定とBazel
怖くないGradle設定とBazel
shimada tatsuya
最速でリリースするためのAndroidアプリデザイン
最速でリリースするためのAndroidアプリデザイン
Naoki Aoyama
Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発
Takuya Ueda
AndroidLint #DroidKaigi
AndroidLint #DroidKaigi
Yukiya Nakagawa
明日から使えるRxjava頻出パターン (Droid kaigi 2016)
明日から使えるRxjava頻出パターン (Droid kaigi 2016)
Kazuki Yoshida
Viewers also liked
(11)
DroidKaigi2016 windows環境での効率的なアプリ開発手法
DroidKaigi2016 windows環境での効率的なアプリ開発手法
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Master of Canvas
Master of Canvas
用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法
パーミッションモデルの過渡期への対応
パーミッションモデルの過渡期への対応
Android Dev Tools Knowledge
Android Dev Tools Knowledge
怖くないGradle設定とBazel
怖くないGradle設定とBazel
最速でリリースするためのAndroidアプリデザイン
最速でリリースするためのAndroidアプリデザイン
Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発
AndroidLint #DroidKaigi
AndroidLint #DroidKaigi
明日から使えるRxjava頻出パターン (Droid kaigi 2016)
明日から使えるRxjava頻出パターン (Droid kaigi 2016)
Similar to インストールリファラでハマった話
今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おう
Hayashi Yuichi
クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0
NIFTY Cloud
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
Kazunari Hara
はてなのサービスの開発環境
はてなのサービスの開発環境
ast_j
PhoneGap勉強会 - 実践編 -
PhoneGap勉強会 - 実践編 -
Katsumi Onishi
OpenCV4Androidで画像処理アプリのススメ
OpenCV4Androidで画像処理アプリのススメ
Masaki Otsuki
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
Masahito Zembutsu
Vagrant & Dockerによるイマドキの開発環境構築
Vagrant & Dockerによるイマドキの開発環境構築
Nakazawa Yuichi
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Naoki Umehara
カオスエンジニアリング入門〜ChaosBladeの紹介〜
カオスエンジニアリング入門〜ChaosBladeの紹介〜
Nobuhide Watanabe
Single Command Deployのための gradle-aws-plugin講座
Single Command Deployのための gradle-aws-plugin講座
都元ダイスケ Miyamoto
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
Yuta Matsumura
Cordovaの最近ホットな話題と地雷をまとめて紹介
Cordovaの最近ホットな話題と地雷をまとめて紹介
アシアル株式会社
Gradleプラグインを作成してみた
Gradleプラグインを作成してみた
shinya sakemoto
20131227_appium+rspec
20131227_appium+rspec
Kazuaki Matsuo
capybara で快適なテスト生活を
capybara で快適なテスト生活を
Ryunosuke SATO
デブサミ2013【15-D-4】Opsから挑むDevOps
デブサミ2013【15-D-4】Opsから挑むDevOps
Developers Summit
OSC福岡 20111203
OSC福岡 20111203
Hiroshi Bunya
2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門
miso- soup3
JavaScript Tips 2015(PDF 版)
JavaScript Tips 2015(PDF 版)
taskie
Similar to インストールリファラでハマった話
(20)
今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おう
クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
はてなのサービスの開発環境
はてなのサービスの開発環境
PhoneGap勉強会 - 実践編 -
PhoneGap勉強会 - 実践編 -
OpenCV4Androidで画像処理アプリのススメ
OpenCV4Androidで画像処理アプリのススメ
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
Vagrant & Dockerによるイマドキの開発環境構築
Vagrant & Dockerによるイマドキの開発環境構築
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
カオスエンジニアリング入門〜ChaosBladeの紹介〜
カオスエンジニアリング入門〜ChaosBladeの紹介〜
Single Command Deployのための gradle-aws-plugin講座
Single Command Deployのための gradle-aws-plugin講座
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
Cordovaの最近ホットな話題と地雷をまとめて紹介
Cordovaの最近ホットな話題と地雷をまとめて紹介
Gradleプラグインを作成してみた
Gradleプラグインを作成してみた
20131227_appium+rspec
20131227_appium+rspec
capybara で快適なテスト生活を
capybara で快適なテスト生活を
デブサミ2013【15-D-4】Opsから挑むDevOps
デブサミ2013【15-D-4】Opsから挑むDevOps
OSC福岡 20111203
OSC福岡 20111203
2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門
JavaScript Tips 2015(PDF 版)
JavaScript Tips 2015(PDF 版)
More from shinya sakemoto
ScreenshotをPCから手軽に扱えるようにしたい
ScreenshotをPCから手軽に扱えるようにしたい
shinya sakemoto
Gitpodでブラウザからflutterで開発する
Gitpodでブラウザからflutterで開発する
shinya sakemoto
Flutter for Webで値を保存する
Flutter for Webで値を保存する
shinya sakemoto
チュートリアルをリッチにしよう
チュートリアルをリッチにしよう
shinya sakemoto
Android study part5
Android study part5
shinya sakemoto
Android study part4
Android study part4
shinya sakemoto
Android study part3
Android study part3
shinya sakemoto
Android study part2
Android study part2
shinya sakemoto
Android study part1
Android study part1
shinya sakemoto
Material Designなdrawerを実装したい
Material Designなdrawerを実装したい
shinya sakemoto
Google Play Developer APIを使ってみた
Google Play Developer APIを使ってみた
shinya sakemoto
ちょっと優しい入力項目
ちょっと優しい入力項目
shinya sakemoto
foursquareの楽しみ方
foursquareの楽しみ方
shinya sakemoto
More from shinya sakemoto
(13)
ScreenshotをPCから手軽に扱えるようにしたい
ScreenshotをPCから手軽に扱えるようにしたい
Gitpodでブラウザからflutterで開発する
Gitpodでブラウザからflutterで開発する
Flutter for Webで値を保存する
Flutter for Webで値を保存する
チュートリアルをリッチにしよう
チュートリアルをリッチにしよう
Android study part5
Android study part5
Android study part4
Android study part4
Android study part3
Android study part3
Android study part2
Android study part2
Android study part1
Android study part1
Material Designなdrawerを実装したい
Material Designなdrawerを実装したい
Google Play Developer APIを使ってみた
Google Play Developer APIを使ってみた
ちょっと優しい入力項目
ちょっと優しい入力項目
foursquareの楽しみ方
foursquareの楽しみ方
インストールリファラでハマった話
1.
インストールリファラで ハマった話 2014/4/9 @sakebook http://sakebook.blogspot.com https://github.com/sakebook
2.
開発環境でテスト
3.
adb shell am
broadcast -a com.android.vending.INSTALL_REFERRER -n PKG_NAME/.MyBroadcastReceiver —es referrer utm_campaign%3Dsample_campaign
4.
テストをパスしたため本番公開
5.
本番で不具合
6.
\(^o^)/
7.
開発環境では再現しないが 本番環境では再現する
8.
α/β版テスト機能
9.
既存ユーザに影響を与える事 無く本番環境でテストができる ※バージョンはapkアップロードの度上昇し、戻せない
10.
ここから本題
11.
開発環境と本番環境では 何が違ったのか?
12.
ActivityとBroadcastは 別スレッドで走る
13.
Broadcastが先行するとは 限らない! adbを用いるため 必ずBroadcastが先行! • $ adb
~ • BroadcastReceiver#onReceive • アプリ起動 • Activity#onCreate • アプリ起動 • Activity#onCreate • ↕️ • BroadcastReceiver#onReceive 開発環境 本番環境
14.
Activityの状態を監視しよう (オブザーバー) ActivityがBroadcastからの通知を受け取る準備が できてない状態で通知をしようとするため 通知に失敗する。 ! Activityが自分のタイミングで 通知を受け取るようにする。
15.
public class GooglePlayReceiver
extends BroadcastReceiver{ ! @Override public void onReceive(Context context, Intent intent) { …. ! if (!TextUtils.isEmpty(campaign)) { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); preferences.edit().putString("referrer", campaign).commit(); ! MyObserver.getInstance().notifyObserver(); } } } Broadcast
16.
public class MyObserver{ private
static MyObserver ourInstance = new MyObserver(); private static List<ReceiveObserver> mObservers = new CopyOnWriteArrayList<ReceiveObserver>(); …. public void notifyObserver() { /* 登録されている全監視対象に変更を通知 */ for (int i=0; i<mObservers.size(); i++) { mObservers.get(i).onReceived(); } } …. } Observer
17.
public class MainActivity
extends ActionBarActivity implements ReceiveObserver{ ! @Override protected void onCreate(Bundle savedInstanceState) { … /* 呼ばれても良い状態になったら監視対象にする */ MyObserver.getInstance().addObserver(this); doSomeThing(); } ! @Override public void onReceived() { /* 監視対象から外す */ MyObserver.getInstance().removeObserver(this); doSomeThing(); } ! private void doSomeThing() { /* 通常起動、及びReceiverスレッドより先行した場合はリファラがない。 */ if (TextUtils.isEmpty(referrer)) { return; } /* 本当にしたいこと */ } } Activity
18.
まとめ ・本番でしか再現できないときはα/β版で試そう ・ActivityとBroadcastは別スレッドで 動くので制御が必要 !
19.
以上 サンプルコード https://github.com/sakebook/android-sample-referrertest
Download now