SlideShare a Scribd company logo
顧客リーチ手段再考
エムスリー株式会社 岩佐 淳史
自己紹介
● 2015/04/01 エムスリー入社
○ m3.comアプリ (iOS/swift)
○ PCサイトフロント www.m3.com (scala/play, java/spring)
○ SPサイトフロント sp.m3.com (scala/play, java/SAStruts)
○ アプリバックエンド api.m3.com (java/SAStruts)
○ 各種バックエンド (scala/play, java/xxx)
● 入社以前
○ iOSアプリ開発 (Objective-C)
○ Androidアプリ開発 (Java)
○ 機械学習 (mathematica, R言語, C++)
○ 組み込み (Toppers, V850アセンブラ, C, C++)
○ Windowsアプリ開発 (C#, C++/cli, C++/MFC)
アジェンダ
● 顧客リーチ手段
● WebPush実装
顧客リーチ手段
● メール
● DM
● Push通知
○ アプリPush
○ WebPush
● 検索エンジン
● 広告
● ソーシャルメディア
● etc...
Copyright © 2015 M3, Inc. All rights reserved. 5
m3.com
・m3.com:
 医療従事者専用の「プラットフォーム」
・25万人以上(日本の約80%)の医師会員
 が利用。最新の医療ニュース、クイズ、
 取材コンテンツ、医師同士のQ&Aサービ
 ス等、会員制総合医療情報サービス
・「MR君」:製薬会社からの医薬品情報を
 オンラインで受け取り、多忙な医師の時間
 効率化に貢献
・iOS、Android版も絶賛開発中
弊社サイトへの流入数/day
* 2つの経路から流入した場合は重複カウントされている
メール 約 48%
広告 約 0.2%
検索エンジン/直接アクセス 約 36%
APP 約15%
それぞれでやっている施策
● メール -> 登録訴求, A/Bテスト, パーソナライズ
● 広告 -> 約0.2%と少ないのでスルー
● 検索エンジン -> SEO対策(今回はパス)
● APP -> インストール促進, Push通知
ニュースメルマガの件名テスト
● 一部の事前テストユーザーに対して3つの件名でA/Bテストを実施し、最もクリック
率が高いテスト結果内容を残りの本配信ユーザーに配信
Push通知 〜受信許可率〜
現状の受信許可率
● 向上するようにダイアログを出したり
● 通知をONにしたらインセンティブを与えたり
SP WebPush 約70%
APP iOS 約72%
APP Android 約71%
Push通知 〜開封率〜
現状の開封率
● 現状は何もできていない
(以前、パーソナライズしようとして失敗した
A/Bテストをやるにしてもメルマガに比べて現状ではパイが小さいので後回し)
SP WebPush 約11%
APP iOS 約0.6%
APP Android 約5%
まとめ
1. そもそもの母数を増やす
2. 十分に母数が増えた後は反応率を上げる施策を実施する
Web Push
目的
メールやアプリプッシュ通知と同様の「新しい飛び道具」を追加することにより、m3.com
会員のさらなるアクティブ化をはかりm3.com全体利益貢献増を狙う。
効果(予定)
xxx人(想定最大来訪者数)
*
4%(WebPushに対する反応率 <- アプリプッシュ等からの想定値)
*
365日(1年)
*
yyy円(1来訪あたりの想定利益値)
=
zzz億円(予定)
アジェンダ
1. 全体構成
2. ウェブアプリの実装
3. サービスワーカーの実装
4. アプリケーションサーバの実装
5. プッシュサーバーの例
6. 使い方
全体構成
プッシュ
サーバ
アプリケーショ
ン
サーバ
ブラウザ
1. 購読要求
2. URL
(エンドポイント)
3. URL + 鍵
(エンドポイント)
4. URL(エンドポイント)
に暗号化したペイロードを
POST
5. PUSH!
ブラウザの実装
1. プッシュ通知の登録
a. ブラウザのserviceWorkerからendpointを取得する
b. アプリケーションサーバに endpointを通知する
2. 受信時の処理を登録
a. ブラウザのserviceWorkerのpushイベントリスナとして実装する
Pushイベントリスナの例
self.addEventListener('push', function(evt) {
evt.waitUntil(
self.registration.showNotification(
'(プッシュ通知に表示するタイトル )', {
icon: '(アイコンのURL(パスのみでOK))',
body: '(プッシュ通知に表示する説明テキスト )',
tag: '(識別用の適当なタグ ("tag", "notification", 等)',
vibrate: [400,100,400] // ミリ秒単位で振動と休止の時間を
交互に任意の回数だけ配列に格納
}));}, false);
APサーバからPOSTされるJSONの例
{
"title": "Push Message",
"body": "プッシュ通知にメッセージを付けて送ることが出
来ましたよ",
"tag": "pushMessage201512080001"
}
サービスワーカーの登録
1. window.navigator.serviceWorker.register(‘/sw.js’, {scope: ‘/’});
Promise<ServiceWorkerRegistration>
* serviceWorkerは設置しているパス配下でしか登録できないので注意
(/javascripts/sw.js とかに配置すると/javascripts/配下からしか登録できない)
2. Notification.permission !== ‘denied’ をチェックする
(ブロックされていると ‘denied’ になっている)
3. window.navigator.serviceWorker.ready.then
Promise<ServiceWorkerRegistration>を取得する
4. Notification.requestPermission で通知の許可を求める
Promise<String>
ブロック -> ’denied’
許可 -> ‘granted’
5. 通知するためのトークンと鍵を取得する
swr.pushManager.subscribe({userVisibleOnly: true})
Promise<PushSubscription>
endpoint, p256dh(ブラウザの公開鍵(楕円曲線暗号)), auth(秘密の乱数)
6. アプリケーション・サーバーにPOSTする
* 最新のブラウザ前提なのでfetch APIが使える (byebye jQuery)
7. サーバに登録した結果を保存しておく
* 最新のブラウザ前提なのでローカルストレージが使える (byebye cookie)
サービスワーカーの実装
1. self.addEventListener(‘push’, function(event) {});
Push通知が届いた時の処理を記述
Ex. self.registration.showNotificationで通知を表示できる
2. self.addEventListener(‘notificationclick’, function(event) {});
Push通知をクリックされた時の処理を記述
Ex. event.notification.close()で通知を閉じる
clients.openWindow(‘https://www.m3.com’)でURLを開ける
* Promiseを返すように実装して、event.waitUntilしないと処理が終わる前に強制
終了させられるので注意。よって、webStorageのような同期型APIのコールは実行
できない
通知クリック時のイベントリスナの例
self.addEventListener("notificationclick", function(event) {
event.notification.close();
clients.openWindow("/");
}, false);
サービスワーカーのデバッグ上の注意
● HTTPSが必須
ex. Node.jsであれば require(‘https’)してkeyとcertを提供する
その後キーチェーンに追加(macの場合)
アプリケーションサーバの実装
1. ブラウザからエンドポイントと鍵を受け取る(maybe with loginId, UA)
2. エンドポイントに対してJSONをPOST
* ただし、受け取った公開鍵とauthで暗号化する必要性がある
* なお、暗号化処理はpushのペイロードが無しであれば不要
その場合は、ペイロードにはデータは載せずに、サービスワーカーがfetch APIを用
いてサーバーにデータを問い合わせるように実装する
プッシュサーバ
GCM(Chrome) -> manifestが必要
ex. sp.manifest.json {"name": "m3.com", "short_name": "m3.com", "icons":
[{"src":"https://s.m3img.com/atlas/1.0.0/images/favicon/android-chrome-192x192.png", "sizes":
"192x192", "type": "image/png" }],
"display": "standalone", "start_url": "https://sp.m3.com", "gcm_sender_id": "856748432996"}
<link rel="manifest" href="${at("/manifest/sp.manifest.json")}" />
FCM(Chrome 52以降)
Simple Push(Firefox)

More Related Content

Viewers also liked

でも、機械学習って お難しいんでしょ?
でも、機械学習って お難しいんでしょ?でも、機械学習って お難しいんでしょ?
でも、機械学習って お難しいんでしょ?
Shengbo Xu
 
闇の魔術に対する防衛術
闇の魔術に対する防衛術闇の魔術に対する防衛術
闇の魔術に対する防衛術
Yuki Ishikawa
 
Django 1.9
Django 1.9Django 1.9
Django 1.9
OMEGA (@equal_001)
 
これからはじめるインフラエンジニア
これからはじめるインフラエンジニアこれからはじめるインフラエンジニア
これからはじめるインフラエンジニア外道 父
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
 
インフラ構築とテストについて(ITインフラ業務自動化現状確認会)
インフラ構築とテストについて(ITインフラ業務自動化現状確認会)インフラ構築とテストについて(ITインフラ業務自動化現状確認会)
インフラ構築とテストについて(ITインフラ業務自動化現状確認会)
Yosuke Hiraishi
 
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
Operation Lab, LLC.
 
アプリエンジニアからクラウド専用のインフラエンジニアになってみて
アプリエンジニアからクラウド専用のインフラエンジニアになってみてアプリエンジニアからクラウド専用のインフラエンジニアになってみて
アプリエンジニアからクラウド専用のインフラエンジニアになってみて
Sato Shun
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
 
インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)
Akihiro Kuwano
 
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-
賢 秋穂
 
インフラエンジニアがUnityをやるべきたった一つの理由
インフラエンジニアがUnityをやるべきたった一つの理由インフラエンジニアがUnityをやるべきたった一つの理由
インフラエンジニアがUnityをやるべきたった一つの理由
axsh co., LTD.
 
⼤企業で実現するイマドキの内製開発
⼤企業で実現するイマドキの内製開発⼤企業で実現するイマドキの内製開発
⼤企業で実現するイマドキの内製開発
NTT Communications Technology Development
 

Viewers also liked (13)

でも、機械学習って お難しいんでしょ?
でも、機械学習って お難しいんでしょ?でも、機械学習って お難しいんでしょ?
でも、機械学習って お難しいんでしょ?
 
闇の魔術に対する防衛術
闇の魔術に対する防衛術闇の魔術に対する防衛術
闇の魔術に対する防衛術
 
Django 1.9
Django 1.9Django 1.9
Django 1.9
 
これからはじめるインフラエンジニア
これからはじめるインフラエンジニアこれからはじめるインフラエンジニア
これからはじめるインフラエンジニア
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
インフラ構築とテストについて(ITインフラ業務自動化現状確認会)
インフラ構築とテストについて(ITインフラ業務自動化現状確認会)インフラ構築とテストについて(ITインフラ業務自動化現状確認会)
インフラ構築とテストについて(ITインフラ業務自動化現状確認会)
 
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
 
アプリエンジニアからクラウド専用のインフラエンジニアになってみて
アプリエンジニアからクラウド専用のインフラエンジニアになってみてアプリエンジニアからクラウド専用のインフラエンジニアになってみて
アプリエンジニアからクラウド専用のインフラエンジニアになってみて
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
 
インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)
 
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-
 
インフラエンジニアがUnityをやるべきたった一つの理由
インフラエンジニアがUnityをやるべきたった一つの理由インフラエンジニアがUnityをやるべきたった一つの理由
インフラエンジニアがUnityをやるべきたった一つの理由
 
⼤企業で実現するイマドキの内製開発
⼤企業で実現するイマドキの内製開発⼤企業で実現するイマドキの内製開発
⼤企業で実現するイマドキの内製開発
 

Similar to 顧客リーチ手段再考

[CTO Night & Day 2019] ML services: MLOps #ctonight
[CTO Night & Day 2019] ML services: MLOps #ctonight[CTO Night & Day 2019] ML services: MLOps #ctonight
[CTO Night & Day 2019] ML services: MLOps #ctonight
Amazon Web Services Japan
 
ニューノーマル時代のテストエンジニアへの"food for thought" (JaSST'18 Kansai)
ニューノーマル時代のテストエンジニアへの"food for thought" (JaSST'18 Kansai)ニューノーマル時代のテストエンジニアへの"food for thought" (JaSST'18 Kansai)
ニューノーマル時代のテストエンジニアへの"food for thought" (JaSST'18 Kansai)
Keizo Tatsumi
 
Digital marketing on AWS
Digital marketing on AWSDigital marketing on AWS
Digital marketing on AWS
Yuta Imai
 
ソフトウェアテストの歴史と近年の動向
ソフトウェアテストの歴史と近年の動向ソフトウェアテストの歴史と近年の動向
ソフトウェアテストの歴史と近年の動向
Keizo Tatsumi
 
Smfl20201001
Smfl20201001Smfl20201001
スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向
Tsutomu Ogasawara
 
広告プラットフォームの開発(ScaleOutの場合)
広告プラットフォームの開発(ScaleOutの場合)広告プラットフォームの開発(ScaleOutの場合)
広告プラットフォームの開発(ScaleOutの場合)
Toshiaki Ishibashi
 
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~Akira Inoue
 
Sharoid Service Menu
Sharoid Service MenuSharoid Service Menu
Sharoid Service Menusharoid
 
かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう Shuhei Iitsuka
 
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternApplication Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternAtsushi Kambara
 
Developer's summit 2021 [19-D-5]なぜ今、ローコードなのか
Developer's summit 2021 [19-D-5]なぜ今、ローコードなのかDeveloper's summit 2021 [19-D-5]なぜ今、ローコードなのか
Developer's summit 2021 [19-D-5]なぜ今、ローコードなのか
Tetsuo Ajima
 
スタートアップと大規模サイトの JavaScript
スタートアップと大規模サイトの JavaScript スタートアップと大規模サイトの JavaScript
スタートアップと大規模サイトの JavaScript
Nao Yanagisawa
 
AWSとReactで始めるShopifyアプリ開発
AWSとReactで始めるShopifyアプリ開発AWSとReactで始めるShopifyアプリ開発
AWSとReactで始めるShopifyアプリ開発
Takaaki Kurasawa
 
My Individual Output
My Individual OutputMy Individual Output
My Individual Output
Mitsuhiro Yamashita
 
Introducing microsoft learn
 Introducing microsoft learn Introducing microsoft learn
Introducing microsoft learn
ru pic
 
20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~
20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~
20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~
MasashiOtsuka1
 
Angularを利用したシステム開発事例
Angularを利用したシステム開発事例Angularを利用したシステム開発事例
じげんのサーバサイドエンジニアリング
じげんのサーバサイドエンジニアリングじげんのサーバサイドエンジニアリング
じげんのサーバサイドエンジニアリング
株式会社じげん (ZIGExN Co., Ltd.)
 
stapy_028_talk1
stapy_028_talk1stapy_028_talk1
stapy_028_talk1
Takeshi Akutsu
 

Similar to 顧客リーチ手段再考 (20)

[CTO Night & Day 2019] ML services: MLOps #ctonight
[CTO Night & Day 2019] ML services: MLOps #ctonight[CTO Night & Day 2019] ML services: MLOps #ctonight
[CTO Night & Day 2019] ML services: MLOps #ctonight
 
ニューノーマル時代のテストエンジニアへの"food for thought" (JaSST'18 Kansai)
ニューノーマル時代のテストエンジニアへの"food for thought" (JaSST'18 Kansai)ニューノーマル時代のテストエンジニアへの"food for thought" (JaSST'18 Kansai)
ニューノーマル時代のテストエンジニアへの"food for thought" (JaSST'18 Kansai)
 
Digital marketing on AWS
Digital marketing on AWSDigital marketing on AWS
Digital marketing on AWS
 
ソフトウェアテストの歴史と近年の動向
ソフトウェアテストの歴史と近年の動向ソフトウェアテストの歴史と近年の動向
ソフトウェアテストの歴史と近年の動向
 
Smfl20201001
Smfl20201001Smfl20201001
Smfl20201001
 
スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向
 
広告プラットフォームの開発(ScaleOutの場合)
広告プラットフォームの開発(ScaleOutの場合)広告プラットフォームの開発(ScaleOutの場合)
広告プラットフォームの開発(ScaleOutの場合)
 
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
 
Sharoid Service Menu
Sharoid Service MenuSharoid Service Menu
Sharoid Service Menu
 
かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう
 
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternApplication Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
 
Developer's summit 2021 [19-D-5]なぜ今、ローコードなのか
Developer's summit 2021 [19-D-5]なぜ今、ローコードなのかDeveloper's summit 2021 [19-D-5]なぜ今、ローコードなのか
Developer's summit 2021 [19-D-5]なぜ今、ローコードなのか
 
スタートアップと大規模サイトの JavaScript
スタートアップと大規模サイトの JavaScript スタートアップと大規模サイトの JavaScript
スタートアップと大規模サイトの JavaScript
 
AWSとReactで始めるShopifyアプリ開発
AWSとReactで始めるShopifyアプリ開発AWSとReactで始めるShopifyアプリ開発
AWSとReactで始めるShopifyアプリ開発
 
My Individual Output
My Individual OutputMy Individual Output
My Individual Output
 
Introducing microsoft learn
 Introducing microsoft learn Introducing microsoft learn
Introducing microsoft learn
 
20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~
20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~
20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~
 
Angularを利用したシステム開発事例
Angularを利用したシステム開発事例Angularを利用したシステム開発事例
Angularを利用したシステム開発事例
 
じげんのサーバサイドエンジニアリング
じげんのサーバサイドエンジニアリングじげんのサーバサイドエンジニアリング
じげんのサーバサイドエンジニアリング
 
stapy_028_talk1
stapy_028_talk1stapy_028_talk1
stapy_028_talk1
 

顧客リーチ手段再考