SlideShare a Scribd company logo
1 of 70
Download to read offline
PHPでスマホアプリに
プッシュ通知する
デジタルサーカス(株)長谷川智希
長谷川智希
とも き
@tomzoh

とむぞう
開発系趣味
その他趣味
Webサイト開発, iOSアプリ開発
レンタルカートレース, 電子工作(mbed), …
TOMZOH
お仕事 スマホアプリ受託開発 Mgr
デジタルサーカス(株) 副団長CTO
Facebook CakePHP iOS
デジタルサーカス(株)
・ Webサイト受託開発
・ スマホアプリ受託開発



・ 自社サービス
(PHP, Drupal, CakePHP)
(iOS, Android)



(http://appbuilder.jp)
Twitter: @tomzoh
Twitter: @tomzoh
Twitter: @tomzoh
今日のテーマ:
PHPでスマホアプリに
プッシュ通知する
今日のテーマ:
PHPでスマホアプリに
プシュッ通知する
今日のテーマ:
PHPでスマホアプリに
プシュッ通知する
🍺
🍺基礎知識🍺
スマホアプリのプッシュ通知
• 呼び方はiOS / Androidでちょっと違う
• iOS: Apple Push Notification Service (APNs)
• Android: Google Cloud Messaging (GCM)
• どっちもHTTPベースの技術でできています😃
• アプリに対して送信します。
• アプリが入っていないと届かない。
プッシュ通知の概要 - 準備
Apple / Google アプリ用サーバ
スマホアプリ
①デバイストークン*1
を取得
*1)AndroidではRegistration ID
プッシュ通知の概要 - 準備
Apple / Google アプリ用サーバ
スマホアプリ
②デバイストークンを登録
(多くのケースではユーザIDや端末IDと
ひもづけて送信する。)
端末ID1, デバイストークン1
端末ID2, デバイストークン2
端末ID3, デバイストークン3
:
プッシュ通知の概要 - 送信
Apple / Google アプリ用サーバ
スマホアプリ
③デバイストークン
とメッセージを送信
端末ID1, デバイストークン1
端末ID2, デバイストークン2
端末ID3, デバイストークン3
:
http
プッシュ通知の概要 - 送信
Apple / Google アプリ用サーバ
スマホアプリ
④プッシュ通知!
お知らせだよ!
でやる
プッシュ通知の概要 - 送信
Apple / Google アプリ用サーバ
スマホアプリ
端末ID1, デバイストークン1
端末ID2, デバイストークン2
端末ID3, デバイストークン3
:
プッシュ通知の概要 - 送信
Apple / Google アプリ用サーバ
スマホアプリ
端末ID1, デバイストークン1
端末ID2, デバイストークン2
端末ID3, デバイストークン3
:
プッシュ通知の概要 - 送信
Apple / Google アプリ用サーバ
スマホアプリ
端末ID1, デバイストークン1
端末ID2, デバイストークン2
端末ID3, デバイストークン3
:
これを で。
Androidのプッシュ通知送信
$ curl 
--header "Authorization: key=【APIキー】" 
--header Content-Type:"application/json"" 
https://android.googleapis.com/gcm/send 
-d "{"registration_ids":["【RegistrationID】"],"data":
{"message":"Hello monotty!"}}"
Androidのプッシュ通知送信
$ curl 
--header "Authorization: key=【APIキー】" 
--header Content-Type:"application/json"" 
https://android.googleapis.com/gcm/send 
-d "{"registration_ids":["【RegistrationID】"],"data":
{"message":"Hello monotty!"}}"
• かんたん。
• 生PHPでもぜんぜんOK。
😇
iOSのプッシュ通知送信
• バイナリインタフェース
iOSのプッシュ通知送信
• バイナリインタフェース
😱• めんどい!
つらたん😭
つらたん😭
• PHPなんだから誰か良いライブラリ作ってくれてる
んじゃないの?😢
つらたん😭
• PHPなんだから誰か良いライブラリ作ってくれてる
んじゃないの?😢
→ 正解。ApnsPHPという鉄板ライブラリがある😊
• composerで入れられるフォークもあり。
• this fork is a Apns_PHP namespaced version!
ideal to use as vendor in sf2 or zf2.
composer
ApnsPHPでのiOSプッシュ送信
ApnsPHPでのiOSプッシュ送信
テスト環境への接続
ApnsPHPでのiOSプッシュ送信
テスト環境への接続
テスト環境用の証明書
基本こんだけ。
簡単。
細かいお話
Apple / Google アプリ用サーバ
スマホアプリ
②デバイストークンを登録
(多くのケースではユーザIDや端末IDと
ひもづけて送信する。)
端末ID1, デバイストークン1
端末ID2, デバイストークン2
端末ID3, デバイストークン3
:
参考1: アプリ用サーバに送信するデータ例
Apple / Google アプリ用サーバ
スマホアプリ
②デバイストークンを登録
(多くのケースではユーザIDや端末IDと
ひもづけて送信する。)
端末ID1, デバイストークン1
端末ID2, デバイストークン2
端末ID3, デバイストークン3
:
参考1: アプリ用サーバに送信するデータ例
{
device_id : 6521e13b9e1e2b45f15b16c65334b622097f07489c96a9a35413b49018b4126a ,
os : iOS ,
device_token : 8994b692542e6d5229fb925fe29a5a60e51017a81eca3d76881c91bf0bce40e3
}
Apple / Google アプリ用サーバ
スマホアプリ
②デバイストークンを登録
(多くのケースではユーザIDや端末IDと
ひもづけて送信する。)
端末ID1, デバイストークン1
端末ID2, デバイストークン2
端末ID3, デバイストークン3
:
参考1: アプリ用サーバに送信するデータ例
{
device_id : 6521e13b9e1e2b45f15b16c65334b622097f07489c96a9a35413b49018b4126a ,
os : iOS ,
device_token : 8994b692542e6d5229fb925fe29a5a60e51017a81eca3d76881c91bf0bce40e3
}
デバイスIDとしてユーザID+シードのハッシュを使うことが多いです。
Apple / Google アプリ用サーバ
スマホアプリ
②デバイストークンを登録
(多くのケースではユーザIDや端末IDと
ひもづけて送信する。)
端末ID1, デバイストークン1
端末ID2, デバイストークン2
端末ID3, デバイストークン3
:
参考1: アプリ用サーバに送信するデータ例
{
device_id : 6521e13b9e1e2b45f15b16c65334b622097f07489c96a9a35413b49018b4126a ,
os : iOS ,
device_token : 8994b692542e6d5229fb925fe29a5a60e51017a81eca3d76881c91bf0bce40e3
}
デバイスIDとしてユーザID+シードのハッシュを使うことが多いです。
iOSの場合こんな長さ(64bytes)。Androidは140∼210bytes程度。
参考2: デバイストークンの変化
• iOSのデバイストークンは変わることがある。
• バックアップからのリストア、OSアップグレード等。
• 起動時に毎回取得してサーバに送信するべき。
• AndroidのRegistration IDも変わることがある。
• こちらも起動時に毎回サーバに送信する。
• どちらも端末IDなどをキーに毎回上書きすることに
なる。
参考3: iOS, 開発 & 本番環境
• iOSの場合、2つの接続先がある。
• 開発ビルド: 開発用プッシュ通知サーバ(SANDBOX)
• リリースビルド: 本番用プッシュ通知サーバ(PRODUCTION)
• デバイストークンが異なる。
• 開発用のトークンを本番に投げるとエラーになる。
• 本番環境に開発用トークンが混ざらないように注意。
• とは言っても混じるので送信プログラム側でエラー処理をちゃ
んとやる。
参考4: 発生するエラー
• iOSの場合、エラーは2パターン。
• 送信時エラー: デバイストークンがおかしい等
• あとからエラー: 電源がずっと入っていないまたは圏外でのタイ
ムアウト、アプリがアンインストールされている等

→ このエラーもApnsPHPで取得できる。(Feedback)
• Androidの場合、送信時エラーのみ。
• Androidではアンインストールを検出できるのでアンインストー
ル時にアプリ用サーバからRegistration IDを削除すべき。
参考5: 多対多?一対多?
• アプリがID/パスワードでログインする場合設計に
注意する必要あり。
• プッシュ通知用のデバイストークンは「端末」に1つ。
• 以下の場合プッシュ通知は「どの端末」に送る?
• ある端末にログイン → ログアウト
• さらにその後別のユーザでログイン
• あるユーザが端末Aと端末Bにログイン
• ある端末にログイン。別の端末にリストア。

余談: iOS, 例のダイアログ
Apple / Google アプリ用サーバ
スマホアプリ
①デバイストークンを
取得
このタイミングで
ダイアログが出る
まとめ
まとめ
• iOSもAndroidも基本的には同じ仕組み。
• デバイストークン / Registration IDを取得。
• 取得したトークンを使って送信先を指定する。
• プッシュ通知送信はHTTPで。
• AndroidはテキストベースのシンプルなHTTP通信で送信できる。
• iOSはちょっと面倒だけど、ApnsPHPを使ってラクできる。
• 特有の要注意ポイントあり。
• APIやバッチ設計時にしっかり考える。
One more thing...
テスト環境用の証明書テスト環境用の証明書
テスト環境用の証明書
証明書の作成
1. MacのキーチェーンアクセスでCSRを作成
2. Apple Developerページにアップロード
3. 証明書をダウンロード
4. Macに証明書をインストール
5. キーチェーンアクセスでファイルに書き出す
6. コマンドラインでpem形式に変換
証明書の作成
1. MacのキーチェーンアクセスでCSRを作成
2. Apple Developerページにアップロード
3. 証明書をダウンロード
4. Macに証明書をインストール
5. キーチェーンアクセスでファイルに書き出す
6. コマンドラインでpem形式に変換
お客さま < Mac無いです!
証明書の作成
1. MacのキーチェーンアクセスでCSRを作成
2. Apple Developerページにアップロード
3. 証明書をダウンロード
4. Macに証明書をインストール
5. キーチェーンアクセスでファイルに書き出す
6. コマンドラインでpem形式に変換
お客さま < Mac無いです!
お客さま < 英語…
証明書の作成
1. MacのキーチェーンアクセスでCSRを作成
2. Apple Developerページにアップロード
3. 証明書をダウンロード
4. Macに証明書をインストール
5. キーチェーンアクセスでファイルに書き出す
6. コマンドラインでpem形式に変換
お客さま < Mac無いです!
お客さま < 英語…
お客さま < 何ですかそれ?
ツール作った
デモ
https://www.monotty.com
ありがとうございました
@tomzoh
デジタルサーカス(株)
声かけてください
おまけ1
エンディアン
• f8a3b2というデータがあった時にメモリにどの様
に格納するか。
f8ビッグエンディアン
+0
a3
+1
リトルエンディアン
b2
+2
f8a3b2
エンディアン
• f8a3b2というデータがあった時にメモリにどの様
に格納するか。
f8ビッグエンディアン
+0
a3
+1
リトルエンディアン
b2
+2
f8a3b2
見た目通り!キモチイイ!
エンディアン
• f8a3b2というデータがあった時にメモリにどの様
に格納するか。
f8ビッグエンディアン
+0
a3
+1
リトルエンディアン
b2
+2
f8a3b2
見た目通り!キモチイイ!
何バイトの値を入れても「1の位」が
最初に来る!キモチイイ!
エンディアン
• f8a3b2というデータがあった時にメモリにどの様
に格納するか。
f8ビッグエンディアン
+0
a3
+1
リトルエンディアン
b2
+2
f8a3b2
見た目通り!キモチイイ!
何バイトの値を入れても「1の位」が
最初に来る!キモチイイ!
エンディアン
• f8a3b2というデータがあった時にメモリにどの様
に格納するか。
f8ビッグエンディアン
+0
a3
+1
リトルエンディアン
b2
+2
f8a3b2
見た目通り!キモチイイ!
何バイトの値を入れても「1の位」が
最初に来る!キモチイイ!
エンディアン
UTF-8のBOM
= Byte Order Mark
= ビッグエンディアンかリトルエンディアンか
エンディアン
UTF-8のBOM
= Byte Order Mark
= ビッグエンディアンかリトルエンディアンか
発表後やさしいマサカリ頂いた。
UTF-8だと関係無い。UTF-16だと関係ある。
@koyhogeさん感謝!!!
エンディアン
おまけ2
PHPでスマホアプリにプッシュ通知する

More Related Content

What's hot

[AWSマイスターシリーズ]Amazon Elastic Load Balancing (ELB)
[AWSマイスターシリーズ]Amazon Elastic Load Balancing (ELB)[AWSマイスターシリーズ]Amazon Elastic Load Balancing (ELB)
[AWSマイスターシリーズ]Amazon Elastic Load Balancing (ELB)Amazon Web Services Japan
 
Keycloak & midPoint の紹介
Keycloak & midPoint の紹介Keycloak & midPoint の紹介
Keycloak & midPoint の紹介Hiroyuki Wada
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門Hiroyuki Wada
 
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンFluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンKentaro Yoshida
 
Docker管理もHinemosで! ~監視・ジョブ機能を併せ持つ唯一のOSS「Hinemos」のご紹介~
Docker管理もHinemosで! ~監視・ジョブ機能を併せ持つ唯一のOSS「Hinemos」のご紹介~Docker管理もHinemosで! ~監視・ジョブ機能を併せ持つ唯一のOSS「Hinemos」のご紹介~
Docker管理もHinemosで! ~監視・ジョブ機能を併せ持つ唯一のOSS「Hinemos」のご紹介~Hinemos
 
KeycloakでFAPIに対応した高セキュリティなAPIを公開する
KeycloakでFAPIに対応した高セキュリティなAPIを公開するKeycloakでFAPIに対応した高セキュリティなAPIを公開する
KeycloakでFAPIに対応した高セキュリティなAPIを公開するHitachi, Ltd. OSS Solution Center.
 
Fargate起動歴1日の男が語る運用の勘どころ
Fargate起動歴1日の男が語る運用の勘どころFargate起動歴1日の男が語る運用の勘どころ
Fargate起動歴1日の男が語る運用の勘どころYuto Komai
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティスAmazon Web Services Japan
 
Redmineをちょっと便利に! プログラミング無しで使ってみるREST API
Redmineをちょっと便利に! プログラミング無しで使ってみるREST APIRedmineをちょっと便利に! プログラミング無しで使ってみるREST API
Redmineをちょっと便利に! プログラミング無しで使ってみるREST APIGo Maeda
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
プロトコルから見るID連携
プロトコルから見るID連携プロトコルから見るID連携
プロトコルから見るID連携Naohiro Fujie
 
なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景Tatsuo Kudo
 
Keycloak入門-OpenID ConnectによるAPIセキュリティ
Keycloak入門-OpenID ConnectによるAPIセキュリティKeycloak入門-OpenID ConnectによるAPIセキュリティ
Keycloak入門-OpenID ConnectによるAPIセキュリティYuichi Nakamura
 
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - 健人 井関
 
10分でわかるOpenAPI V3
10分でわかるOpenAPI V310分でわかるOpenAPI V3
10分でわかるOpenAPI V3Kazuchika Sekiya
 
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会ShuheiUda
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAkihiro Kuwano
 

What's hot (20)

[AWSマイスターシリーズ]Amazon Elastic Load Balancing (ELB)
[AWSマイスターシリーズ]Amazon Elastic Load Balancing (ELB)[AWSマイスターシリーズ]Amazon Elastic Load Balancing (ELB)
[AWSマイスターシリーズ]Amazon Elastic Load Balancing (ELB)
 
Keycloak & midPoint の紹介
Keycloak & midPoint の紹介Keycloak & midPoint の紹介
Keycloak & midPoint の紹介
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
 
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンFluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
 
Docker管理もHinemosで! ~監視・ジョブ機能を併せ持つ唯一のOSS「Hinemos」のご紹介~
Docker管理もHinemosで! ~監視・ジョブ機能を併せ持つ唯一のOSS「Hinemos」のご紹介~Docker管理もHinemosで! ~監視・ジョブ機能を併せ持つ唯一のOSS「Hinemos」のご紹介~
Docker管理もHinemosで! ~監視・ジョブ機能を併せ持つ唯一のOSS「Hinemos」のご紹介~
 
KeycloakでFAPIに対応した高セキュリティなAPIを公開する
KeycloakでFAPIに対応した高セキュリティなAPIを公開するKeycloakでFAPIに対応した高セキュリティなAPIを公開する
KeycloakでFAPIに対応した高セキュリティなAPIを公開する
 
Fargate起動歴1日の男が語る運用の勘どころ
Fargate起動歴1日の男が語る運用の勘どころFargate起動歴1日の男が語る運用の勘どころ
Fargate起動歴1日の男が語る運用の勘どころ
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
Redmineをちょっと便利に! プログラミング無しで使ってみるREST API
Redmineをちょっと便利に! プログラミング無しで使ってみるREST APIRedmineをちょっと便利に! プログラミング無しで使ってみるREST API
Redmineをちょっと便利に! プログラミング無しで使ってみるREST API
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
自宅インフラの育て方 第2回
自宅インフラの育て方 第2回自宅インフラの育て方 第2回
自宅インフラの育て方 第2回
 
プロトコルから見るID連携
プロトコルから見るID連携プロトコルから見るID連携
プロトコルから見るID連携
 
なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景
 
HTTP/2 入門
HTTP/2 入門HTTP/2 入門
HTTP/2 入門
 
Keycloak入門-OpenID ConnectによるAPIセキュリティ
Keycloak入門-OpenID ConnectによるAPIセキュリティKeycloak入門-OpenID ConnectによるAPIセキュリティ
Keycloak入門-OpenID ConnectによるAPIセキュリティ
 
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
 
Amazon Glacierのご紹介(機能編)
Amazon Glacierのご紹介(機能編) Amazon Glacierのご紹介(機能編)
Amazon Glacierのご紹介(機能編)
 
10分でわかるOpenAPI V3
10分でわかるOpenAPI V310分でわかるOpenAPI V3
10分でわかるOpenAPI V3
 
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
 

Viewers also liked

Laravelのeloquent だけ入れた話
Laravelのeloquent だけ入れた話Laravelのeloquent だけ入れた話
Laravelのeloquent だけ入れた話Masataka Kono
 
ハードディスクの正しい消去(2015.7)
ハードディスクの正しい消去(2015.7)ハードディスクの正しい消去(2015.7)
ハードディスクの正しい消去(2015.7)UEHARA, Tetsutaro
 
H2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのかH2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのかIchito Nagata
 
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiReact Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiYukiya Nakagawa
 
サーバPUSHざっくりまとめ
サーバPUSHざっくりまとめサーバPUSHざっくりまとめ
サーバPUSHざっくりまとめYasuhiro Mawarimichi
 
Androidアプリのストレージ戦略
Androidアプリのストレージ戦略Androidアプリのストレージ戦略
Androidアプリのストレージ戦略Masahiro Hidaka
 
AWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべことAWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべことKeisuke Nishitani
 
B2B Marketing and The Power of Twitter
B2B Marketing and The Power of TwitterB2B Marketing and The Power of Twitter
B2B Marketing and The Power of TwitterSteve Yanor
 
The Be-All, End-All List of Small Business Tax Deductions
The Be-All, End-All List of Small Business Tax DeductionsThe Be-All, End-All List of Small Business Tax Deductions
The Be-All, End-All List of Small Business Tax DeductionsWagepoint
 
Enduring CSS
Enduring CSSEnduring CSS
Enduring CSSTakazudo
 
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法Takuya Ueda
 
【16E2】New Relic を使ったDevOps 時代のパフォーマンス監視と障害分析入門
【16E2】New Relic を使ったDevOps 時代のパフォーマンス監視と障害分析入門【16E2】New Relic を使ったDevOps 時代のパフォーマンス監視と障害分析入門
【16E2】New Relic を使ったDevOps 時代のパフォーマンス監視と障害分析入門Developers Summit
 
Scalaプロダクトのビルド高速化
Scalaプロダクトのビルド高速化Scalaプロダクトのビルド高速化
Scalaプロダクトのビルド高速化kuro kuro
 
Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)lestrrat
 
全てSになる -RxJavaとLWSを持ち込む楽しさ-
全てSになる -RxJavaとLWSを持ち込む楽しさ-全てSになる -RxJavaとLWSを持ち込む楽しさ-
全てSになる -RxJavaとLWSを持ち込む楽しさ-Ryutaro Miyashita
 
「ハイレベルメンバーを共創させたら何が起きるか?実験」結果報告会 スライド
「ハイレベルメンバーを共創させたら何が起きるか?実験」結果報告会 スライド「ハイレベルメンバーを共創させたら何が起きるか?実験」結果報告会 スライド
「ハイレベルメンバーを共創させたら何が起きるか?実験」結果報告会 スライドKeita Takizawa
 
スタートアップを陰ながら支えるときに心がけるべき5ヶ条
スタートアップを陰ながら支えるときに心がけるべき5ヶ条スタートアップを陰ながら支えるときに心がけるべき5ヶ条
スタートアップを陰ながら支えるときに心がけるべき5ヶ条Atsumi Kawashima
 
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介Masataka Kono
 
Measuring Content Marketing
Measuring Content MarketingMeasuring Content Marketing
Measuring Content MarketingDavid Iwanow
 

Viewers also liked (20)

Laravelのeloquent だけ入れた話
Laravelのeloquent だけ入れた話Laravelのeloquent だけ入れた話
Laravelのeloquent だけ入れた話
 
ハードディスクの正しい消去(2015.7)
ハードディスクの正しい消去(2015.7)ハードディスクの正しい消去(2015.7)
ハードディスクの正しい消去(2015.7)
 
H2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのかH2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのか
 
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiReact Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
 
サーバPUSHざっくりまとめ
サーバPUSHざっくりまとめサーバPUSHざっくりまとめ
サーバPUSHざっくりまとめ
 
Androidアプリのストレージ戦略
Androidアプリのストレージ戦略Androidアプリのストレージ戦略
Androidアプリのストレージ戦略
 
AWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべことAWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべこと
 
B2B Marketing and The Power of Twitter
B2B Marketing and The Power of TwitterB2B Marketing and The Power of Twitter
B2B Marketing and The Power of Twitter
 
The Be-All, End-All List of Small Business Tax Deductions
The Be-All, End-All List of Small Business Tax DeductionsThe Be-All, End-All List of Small Business Tax Deductions
The Be-All, End-All List of Small Business Tax Deductions
 
Culture
CultureCulture
Culture
 
Enduring CSS
Enduring CSSEnduring CSS
Enduring CSS
 
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
 
【16E2】New Relic を使ったDevOps 時代のパフォーマンス監視と障害分析入門
【16E2】New Relic を使ったDevOps 時代のパフォーマンス監視と障害分析入門【16E2】New Relic を使ったDevOps 時代のパフォーマンス監視と障害分析入門
【16E2】New Relic を使ったDevOps 時代のパフォーマンス監視と障害分析入門
 
Scalaプロダクトのビルド高速化
Scalaプロダクトのビルド高速化Scalaプロダクトのビルド高速化
Scalaプロダクトのビルド高速化
 
Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)
 
全てSになる -RxJavaとLWSを持ち込む楽しさ-
全てSになる -RxJavaとLWSを持ち込む楽しさ-全てSになる -RxJavaとLWSを持ち込む楽しさ-
全てSになる -RxJavaとLWSを持ち込む楽しさ-
 
「ハイレベルメンバーを共創させたら何が起きるか?実験」結果報告会 スライド
「ハイレベルメンバーを共創させたら何が起きるか?実験」結果報告会 スライド「ハイレベルメンバーを共創させたら何が起きるか?実験」結果報告会 スライド
「ハイレベルメンバーを共創させたら何が起きるか?実験」結果報告会 スライド
 
スタートアップを陰ながら支えるときに心がけるべき5ヶ条
スタートアップを陰ながら支えるときに心がけるべき5ヶ条スタートアップを陰ながら支えるときに心がけるべき5ヶ条
スタートアップを陰ながら支えるときに心がけるべき5ヶ条
 
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
 
Measuring Content Marketing
Measuring Content MarketingMeasuring Content Marketing
Measuring Content Marketing
 

Similar to PHPでスマホアプリにプッシュ通知する

PUSH通知証明書作成ツールを作った
PUSH通知証明書作成ツールを作ったPUSH通知証明書作成ツールを作った
PUSH通知証明書作成ツールを作ったTomoki Hasegawa
 
はじめてのiOSアプリ開発 Swift対応版
はじめてのiOSアプリ開発 Swift対応版はじめてのiOSアプリ開発 Swift対応版
はじめてのiOSアプリ開発 Swift対応版Tomoki Hasegawa
 
AppStore申請を一式まるっと自動化する
AppStore申請を一式まるっと自動化するAppStore申請を一式まるっと自動化する
AppStore申請を一式まるっと自動化するTomoki Hasegawa
 
能力ファイル 2Tソフトウエアソリューション株式会社
能力ファイル 2Tソフトウエアソリューション株式会社能力ファイル 2Tソフトウエアソリューション株式会社
能力ファイル 2Tソフトウエアソリューション株式会社Brrs Nguyen(2TS)
 
TestFlightみたいなのを自作する
TestFlightみたいなのを自作するTestFlightみたいなのを自作する
TestFlightみたいなのを自作するTomoki Hasegawa
 
みなさんがHtml5をやらなくていい3つの理由
みなさんがHtml5をやらなくていい3つの理由みなさんがHtml5をやらなくていい3つの理由
みなさんがHtml5をやらなくていい3つの理由Masakazu Muraoka
 
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッションC# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッションYoshito Tabuchi
 
今から始めよう!WordPressで作る女子ウケ★スマホサイト
今から始めよう!WordPressで作る女子ウケ★スマホサイト今から始めよう!WordPressで作る女子ウケ★スマホサイト
今から始めよう!WordPressで作る女子ウケ★スマホサイトrie05
 
Swiftのプロパティオブザーバを使い倒す
Swiftのプロパティオブザーバを使い倒すSwiftのプロパティオブザーバを使い倒す
Swiftのプロパティオブザーバを使い倒すTomoki Hasegawa
 
ハンズオン:Bluemix とスマホでゲームを作ろう!
ハンズオン:Bluemix とスマホでゲームを作ろう! ハンズオン:Bluemix とスマホでゲームを作ろう!
ハンズオン:Bluemix とスマホでゲームを作ろう! softlayerjp
 
Try Firefox OS
Try Firefox OSTry Firefox OS
Try Firefox OSdynamis
 
20120413 nestakabaneworkshop
20120413 nestakabaneworkshop20120413 nestakabaneworkshop
20120413 nestakabaneworkshopYoichiro Sakurai
 
iOSアプリ制作ツールアプリビルダーを支える技術
iOSアプリ制作ツールアプリビルダーを支える技術iOSアプリ制作ツールアプリビルダーを支える技術
iOSアプリ制作ツールアプリビルダーを支える技術Tomoki Hasegawa
 
デブサミ2013【15D-3】Azureセッション資料
デブサミ2013【15D-3】Azureセッション資料デブサミ2013【15D-3】Azureセッション資料
デブサミ2013【15D-3】Azureセッション資料Shinichiro Isago
 
20120316 designerworkshoppublished
20120316 designerworkshoppublished20120316 designerworkshoppublished
20120316 designerworkshoppublishedYoichiro Sakurai
 
スマートフォンアプリ開発小話(岡山WEBクリエイターズ)
スマートフォンアプリ開発小話(岡山WEBクリエイターズ)スマートフォンアプリ開発小話(岡山WEBクリエイターズ)
スマートフォンアプリ開発小話(岡山WEBクリエイターズ)hamahama 34
 

Similar to PHPでスマホアプリにプッシュ通知する (20)

PUSH通知証明書作成ツールを作った
PUSH通知証明書作成ツールを作ったPUSH通知証明書作成ツールを作った
PUSH通知証明書作成ツールを作った
 
はじめてのiOSアプリ開発 Swift対応版
はじめてのiOSアプリ開発 Swift対応版はじめてのiOSアプリ開発 Swift対応版
はじめてのiOSアプリ開発 Swift対応版
 
AppStore申請を一式まるっと自動化する
AppStore申請を一式まるっと自動化するAppStore申請を一式まるっと自動化する
AppStore申請を一式まるっと自動化する
 
Stargazer Meetup #1
Stargazer Meetup #1Stargazer Meetup #1
Stargazer Meetup #1
 
能力ファイル 2Tソフトウエアソリューション株式会社
能力ファイル 2Tソフトウエアソリューション株式会社能力ファイル 2Tソフトウエアソリューション株式会社
能力ファイル 2Tソフトウエアソリューション株式会社
 
TestFlightみたいなのを自作する
TestFlightみたいなのを自作するTestFlightみたいなのを自作する
TestFlightみたいなのを自作する
 
みなさんがHtml5をやらなくていい3つの理由
みなさんがHtml5をやらなくていい3つの理由みなさんがHtml5をやらなくていい3つの理由
みなさんがHtml5をやらなくていい3つの理由
 
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッションC# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
 
今から始めよう!WordPressで作る女子ウケ★スマホサイト
今から始めよう!WordPressで作る女子ウケ★スマホサイト今から始めよう!WordPressで作る女子ウケ★スマホサイト
今から始めよう!WordPressで作る女子ウケ★スマホサイト
 
Swiftのプロパティオブザーバを使い倒す
Swiftのプロパティオブザーバを使い倒すSwiftのプロパティオブザーバを使い倒す
Swiftのプロパティオブザーバを使い倒す
 
IoT ChatOps #IoTLT
IoT ChatOps #IoTLTIoT ChatOps #IoTLT
IoT ChatOps #IoTLT
 
ハンズオン:Bluemix とスマホでゲームを作ろう!
ハンズオン:Bluemix とスマホでゲームを作ろう! ハンズオン:Bluemix とスマホでゲームを作ろう!
ハンズオン:Bluemix とスマホでゲームを作ろう!
 
Try Firefox OS
Try Firefox OSTry Firefox OS
Try Firefox OS
 
20120413 nestakabaneworkshop
20120413 nestakabaneworkshop20120413 nestakabaneworkshop
20120413 nestakabaneworkshop
 
iOSアプリ制作ツールアプリビルダーを支える技術
iOSアプリ制作ツールアプリビルダーを支える技術iOSアプリ制作ツールアプリビルダーを支える技術
iOSアプリ制作ツールアプリビルダーを支える技術
 
Android Push
Android PushAndroid Push
Android Push
 
Oss on Azure, social mobile web
Oss on Azure, social mobile webOss on Azure, social mobile web
Oss on Azure, social mobile web
 
デブサミ2013【15D-3】Azureセッション資料
デブサミ2013【15D-3】Azureセッション資料デブサミ2013【15D-3】Azureセッション資料
デブサミ2013【15D-3】Azureセッション資料
 
20120316 designerworkshoppublished
20120316 designerworkshoppublished20120316 designerworkshoppublished
20120316 designerworkshoppublished
 
スマートフォンアプリ開発小話(岡山WEBクリエイターズ)
スマートフォンアプリ開発小話(岡山WEBクリエイターズ)スマートフォンアプリ開発小話(岡山WEBクリエイターズ)
スマートフォンアプリ開発小話(岡山WEBクリエイターズ)
 

More from Tomoki Hasegawa

Reading php terminal-gameboy-emulator
Reading php terminal-gameboy-emulatorReading php terminal-gameboy-emulator
Reading php terminal-gameboy-emulatorTomoki Hasegawa
 
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMSDrupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMSTomoki Hasegawa
 
とある受託ベンダの開発環境
とある受託ベンダの開発環境とある受託ベンダの開発環境
とある受託ベンダの開発環境Tomoki Hasegawa
 
iOS Developers Conference Japan 2016
iOS Developers Conference Japan 2016iOS Developers Conference Japan 2016
iOS Developers Conference Japan 2016Tomoki Hasegawa
 
エンジニアのお祭り
エンジニアのお祭りエンジニアのお祭り
エンジニアのお祭りTomoki Hasegawa
 
勉強会のこちら側とあちら側
勉強会のこちら側とあちら側勉強会のこちら側とあちら側
勉強会のこちら側とあちら側Tomoki Hasegawa
 
tvOSでWebSocketを使う
tvOSでWebSocketを使うtvOSでWebSocketを使う
tvOSでWebSocketを使うTomoki Hasegawa
 
「これを買っている人はこれも買っています」実装してみた PHP side
「これを買っている人はこれも買っています」実装してみた PHP side「これを買っている人はこれも買っています」実装してみた PHP side
「これを買っている人はこれも買っています」実装してみた PHP sideTomoki Hasegawa
 
tvOSネイティブアプリを作る
tvOSネイティブアプリを作るtvOSネイティブアプリを作る
tvOSネイティブアプリを作るTomoki Hasegawa
 
「これを買っている人はこれも買っています」実装してみた
「これを買っている人はこれも買っています」実装してみた「これを買っている人はこれも買っています」実装してみた
「これを買っている人はこれも買っています」実装してみたTomoki Hasegawa
 
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSDrupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSTomoki Hasegawa
 
PHPカンファレンス福岡に 行ってきた
PHPカンファレンス福岡に 行ってきたPHPカンファレンス福岡に 行ってきた
PHPカンファレンス福岡に 行ってきたTomoki Hasegawa
 
CakePHP3ウォークスルー
CakePHP3ウォークスルーCakePHP3ウォークスルー
CakePHP3ウォークスルーTomoki Hasegawa
 
PHPerのためのSwift入門
PHPerのためのSwift入門PHPerのためのSwift入門
PHPerのためのSwift入門Tomoki Hasegawa
 
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版Tomoki Hasegawa
 
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
オプショナル型。 〜 なんとなく付ける ! ? 撲滅オプショナル型。 〜 なんとなく付ける ! ? 撲滅
オプショナル型。 〜 なんとなく付ける ! ? 撲滅Tomoki Hasegawa
 
Swift事情2014夏 ~ Swift入門 beta6対応
Swift事情2014夏 ~ Swift入門 beta6対応Swift事情2014夏 ~ Swift入門 beta6対応
Swift事情2014夏 ~ Swift入門 beta6対応Tomoki Hasegawa
 
CustomOperatorで遊ぼう!
CustomOperatorで遊ぼう!CustomOperatorで遊ぼう!
CustomOperatorで遊ぼう!Tomoki Hasegawa
 

More from Tomoki Hasegawa (20)

Reading php terminal-gameboy-emulator
Reading php terminal-gameboy-emulatorReading php terminal-gameboy-emulator
Reading php terminal-gameboy-emulator
 
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMSDrupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
 
とある受託ベンダの開発環境
とある受託ベンダの開発環境とある受託ベンダの開発環境
とある受託ベンダの開発環境
 
iOS Developers Conference Japan 2016
iOS Developers Conference Japan 2016iOS Developers Conference Japan 2016
iOS Developers Conference Japan 2016
 
エンジニアのお祭り
エンジニアのお祭りエンジニアのお祭り
エンジニアのお祭り
 
勉強会のこちら側とあちら側
勉強会のこちら側とあちら側勉強会のこちら側とあちら側
勉強会のこちら側とあちら側
 
tvOSでWebSocketを使う
tvOSでWebSocketを使うtvOSでWebSocketを使う
tvOSでWebSocketを使う
 
「これを買っている人はこれも買っています」実装してみた PHP side
「これを買っている人はこれも買っています」実装してみた PHP side「これを買っている人はこれも買っています」実装してみた PHP side
「これを買っている人はこれも買っています」実装してみた PHP side
 
tvOSネイティブアプリを作る
tvOSネイティブアプリを作るtvOSネイティブアプリを作る
tvOSネイティブアプリを作る
 
「これを買っている人はこれも買っています」実装してみた
「これを買っている人はこれも買っています」実装してみた「これを買っている人はこれも買っています」実装してみた
「これを買っている人はこれも買っています」実装してみた
 
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSDrupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
 
PHPカンファレンス福岡に 行ってきた
PHPカンファレンス福岡に 行ってきたPHPカンファレンス福岡に 行ってきた
PHPカンファレンス福岡に 行ってきた
 
CakePHP3ウォークスルー
CakePHP3ウォークスルーCakePHP3ウォークスルー
CakePHP3ウォークスルー
 
PHPerのためのSwift入門
PHPerのためのSwift入門PHPerのためのSwift入門
PHPerのためのSwift入門
 
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
 
3 auto layout tips
3 auto layout tips3 auto layout tips
3 auto layout tips
 
Drupal on vagrant-aws
Drupal on vagrant-awsDrupal on vagrant-aws
Drupal on vagrant-aws
 
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
オプショナル型。 〜 なんとなく付ける ! ? 撲滅オプショナル型。 〜 なんとなく付ける ! ? 撲滅
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
 
Swift事情2014夏 ~ Swift入門 beta6対応
Swift事情2014夏 ~ Swift入門 beta6対応Swift事情2014夏 ~ Swift入門 beta6対応
Swift事情2014夏 ~ Swift入門 beta6対応
 
CustomOperatorで遊ぼう!
CustomOperatorで遊ぼう!CustomOperatorで遊ぼう!
CustomOperatorで遊ぼう!
 

PHPでスマホアプリにプッシュ通知する