SlideShare uma empresa Scribd logo
1 de 70
Baixar para ler 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でスマホアプリにプッシュ通知する

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
ibus-skkをなんとかすっぺ会議
ibus-skkをなんとかすっぺ会議ibus-skkをなんとかすっぺ会議
ibus-skkをなんとかすっぺ会議
 
ストリーミングのげんざい
ストリーミングのげんざいストリーミングのげんざい
ストリーミングのげんざい
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
 
クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計
 
平成最後の1月ですし、Databricksでもやってみましょうか
平成最後の1月ですし、Databricksでもやってみましょうか平成最後の1月ですし、Databricksでもやってみましょうか
平成最後の1月ですし、Databricksでもやってみましょうか
 
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
 
Guide To AGPL
Guide To AGPLGuide To AGPL
Guide To AGPL
 
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
 
GitHub ActionsでiOSのCIを実現しよう
GitHub ActionsでiOSのCIを実現しようGitHub ActionsでiOSのCIを実現しよう
GitHub ActionsでiOSのCIを実現しよう
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
もしSIerのエンジニアがSRE本を読んだら
もしSIerのエンジニアがSRE本を読んだらもしSIerのエンジニアがSRE本を読んだら
もしSIerのエンジニアがSRE本を読んだら
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
 
型安全性入門
型安全性入門型安全性入門
型安全性入門
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツ
 
KeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについてKeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについて
 
GoとDDDでモバイルオーダープラットフォームを 型安全に作り直した話
GoとDDDでモバイルオーダープラットフォームを 型安全に作り直した話GoとDDDでモバイルオーダープラットフォームを 型安全に作り直した話
GoとDDDでモバイルオーダープラットフォームを 型安全に作り直した話
 
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
 

Destaque

React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiReact Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
Yukiya Nakagawa
 
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
Steve Yanor
 

Destaque (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
 

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

みなさんがHtml5をやらなくていい3つの理由
みなさんがHtml5をやらなくていい3つの理由みなさんがHtml5をやらなくていい3つの理由
みなさんがHtml5をやらなくていい3つの理由
Masakazu Muraoka
 
20120413 nestakabaneworkshop
20120413 nestakabaneworkshop20120413 nestakabaneworkshop
20120413 nestakabaneworkshop
Yoichiro Sakurai
 
20120316 designerworkshoppublished
20120316 designerworkshoppublished20120316 designerworkshoppublished
20120316 designerworkshoppublished
Yoichiro Sakurai
 
スマートフォンアプリ開発小話(岡山WEBクリエイターズ)
スマートフォンアプリ開発小話(岡山WEBクリエイターズ)スマートフォンアプリ開発小話(岡山WEBクリエイターズ)
スマートフォンアプリ開発小話(岡山WEBクリエイターズ)
hamahama 34
 

Semelhante a 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クリエイターズ)
 

Mais de Tomoki Hasegawa

Mais de 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でスマホアプリにプッシュ通知する