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
Windows ストアアプリで Push通知を使いこなそう
Search
tanaka_733
May 11, 2013
Technology
0
1.9k
Windows ストアアプリで Push通知を使いこなそう
2013/5/11 Community Open Day 2013 東京会場 ルームB 11:00~のセッション
tanaka_733
May 11, 2013
Tweet
Share
More Decks by tanaka_733
See All by tanaka_733
SRENEXT 2020 [B5] New RelicのSREに学ぶSREのためのNew Relic活用法
tanaka733
2
9.3k
Calling PowerShell from CSharp
tanaka733
0
1.6k
Garbage Collection in .NET Framework
tanaka733
4
2.7k
New Features in Visual Studio 2013
tanaka733
0
1k
Starting Unity for Windows Store App
tanaka733
0
780
とあるインフラエンジニアのAzure活用
tanaka733
2
540
ぼくの考えた割と普通(c)なデプロイ戦略
tanaka733
1
10k
ASP.NET MVC4 Web APIをバックエンドにして作るストアとWindows Phoneプッシュ通知アプリ
tanaka733
0
1.7k
Yurufuwa_CSharp.pdf
tanaka733
0
5.1k
Other Decks in Technology
See All in Technology
新R25、乃木坂46 Mobileなどのファンビジネスを支えるマルチテナンシーなプラットフォームの全体像 / cam-multi-cloud
cyberagentdevelopers
PRO
1
130
Aurora_BlueGreenDeploymentsやってみた
tsukasa_ishimaru
1
130
Amazon FSx for NetApp ONTAPを利用するにあたっての要件整理と設計のポイント
non97
1
160
君は隠しイベントを見つけれるか?
mujyun
0
290
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
5
49k
AWSコンテナ本出版から3年経った今、もし改めて執筆し直すなら / If I revise our container book
iselegant
15
4k
物価高なラスベガスでの過ごし方
zakky
0
380
Forget efficiency – Become more productive without the stress
ufried
0
140
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
3.6k
AIを駆使したゲーム開発戦略: 新設AI組織の取り組み / sge-ai-strategy
cyberagentdevelopers
PRO
1
130
Java x Spring Boot Warm up
kazu_kichi_67
2
490
プロダクトチームへのSystem Risk Records導入・運用事例の紹介/Introduction and Case Studies on Implementing and Operating System Risk Records for Product Teams
taddy_919
1
170
Featured
See All Featured
It's Worth the Effort
3n
183
27k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
32
1.8k
Intergalactic Javascript Robots from Outer Space
tanoku
268
27k
GraphQLの誤解/rethinking-graphql
sonatard
66
9.9k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
22k
The Cult of Friendly URLs
andyhume
78
6k
Making Projects Easy
brettharned
115
5.9k
How STYLIGHT went responsive
nonsquared
95
5.2k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
27
1.9k
Raft: Consensus for Rubyists
vanstee
136
6.6k
Designing the Hi-DPI Web
ddemaree
280
34k
Transcript
Windows ストアアプリで Push通知を使いこなそう @tanaka_733 Community Open Day 2013 5/11 (Sat)
Agenda はじめに なぜPush通知を使うのか クライアント側の実装 サーバー側の実装
自己紹介 (@tanaka_733) めとべや東京 • http://metrostyledev.net/ • #めとべや C# について •
仕事で • 株式会社グラニ勤務 • 趣味の開発で • Windows ストアアプリ • Windows Phone アプリ • Kinect • ブログ • 銀の光と碧い空 ストアアプリは 数本リリース • 子連れ旅行 powered by じゃらん • SkyRecorder • はてな動画(仮) • など
めとべや東京 とは・・・ 定期的に勉強会を開催しています • 前回 3/30 • 次回 7/6 (土)、申し込むサイトができたらTwitterで告知します
• 場所は麹町のKDDI ウェブコミュニケーションズさん(予定) テーマはXAMLを中心としたテクノロジが多め • Metro といいつつ、ストアアプリだけではないよ • 気軽に参加してください! && 登壇者の方も若干名募集してます!!
株式会社グラニ 設立1年たっていないSAP企業 • Kinki KidsのCMやってる「神獄のヴァルハラゲート」 • 今週FP版GREEランキングで1位を獲得 C# への移行を実施中 •
ASP.NET な開発、Windows Serverな運用
セッションの目的 ストアアプリのPush通知に詳しくなる 直接通知とトースト通知の実装を知る サーバーサイドのメッセージ送信をハンドルする
以前のセッションの発展版です WindowsストアアプリでPush通知を使ってみよう at Windows 8 Developers カンファレンス vol.2.0 https://speakerdeck.com/tanaka733/windowssutoaapuride- pushtong-zhi-woshi-tutemiyou
一部同じページ作っていますが、 ぜひ元の資料もご覧ください
Agenda はじめに なぜPush通知を使うのか クライアント側の実装 サーバー側の実装
ストアアプリは没入型 Child Playing Video Games (Animal Crossing) By mamarati http://www.flickr.com/photos/36758336@N00/41589909/
動いていないアプリが情報を伝えるには? • アプリを選んでもらうときにアピール タイル • 新着メッセージの「数」などを表示 バッジ • トースト、直接などの方法で強くアピール 通知
通知の配信方法 (基本的なタイミング) • アプリ実行中にAPIを呼び出す ローカル • 指定した時間にAPIを呼び出すようにスケジュール スケジュール • ポーリングしてタイルとバッジを更新
定期的 • アプリが実行されていなくても外部から送信 • タイル、バッジ、トースト・直接通知のすべてに対応 プッシュ 通知配信方法の選択 http://msdn.microsoft.com/ja-jp/library/windows/apps/hh779721.aspx
プッシュ通知の仕組み https://github.com/tjanczuk/wns
プッシュ通知の仕組み (クライアント側) https://github.com/tjanczuk/wns 開発している ストアアプリ OS側で提供して いる基盤
プッシュ通知の仕組み (サーバー側) https://github.com/tjanczuk/wns 開発する サーバー側 システム MSが提供している 通知基盤
トースト通知と直接通知 • タイル・バッジ通知と同じく、定型的な機能 • OS側でハンドリングされる、実行中でなくても通知される • オフラインの場合、通知は保存されない トースト通知 • アプリが定義したXMLメッセージをやり取りする
• アプリ側でハンドルするための処理が必要 • 実行時には通知配信イベントで受け取る • 非実行時では、バックグラウンドタスクが必要 直接通知
オフラインでも直接通知を受け取る方法 • 既定ではキャッシュされない為受け取れない • X-WNS-Cache-Policy ヘッダーを設定する サーバー • バックグラウンドタスクを使って オフラインでも処理できるようにする
クライア ント
DEMO Azure Mobile Servicesを使ったトースト通知と直接通知
Agenda はじめに なぜPush通知を使うのか クライアント側の実装 サーバー側の実装
クライアント側で必要な処理 ダッシュボードからアプリをストアに登録して、アプリを関連づける マニフェストを編集してトースト通知を許可する ChanelURI を取得して、サーバーサイドに通知する 通知受信イベントを実装する バックグラウンドタスクを実装して、キャッシュされた通知を処理する 直接通知の場合
チャネルの更新の実装 常に前回の送信の状態を記録する • 前回のチャネルURI • 送信のステータス (成功 or 失敗) 取得して必要があれば送信する
• URIが更新された場合 • 前回の送信が失敗している場合 定期的に更新する • チャネルの有効期限は30日 • アプリが30日以上起動されない場合はバックグラウンドタスクで実行 • 状態の記録は固有記憶域を使用
Agenda はじめに なぜPush通知を使うのか クライアント側の実装 サーバー側の実装
サーバー側で必要な処理 クライアントのチャネルURIの管理 • クライアントが送信してくるURIを保存し、管理する • HTTPS接続で通信 • 必要がなくなれば破棄 Push通知をWNSに要求 •
HTTPS接続で通信 • アクセストークンを取得し、チャネルURIに送信
サーバーの構成の選択 Azure Mobile Services などの BaaS • お手軽な反面、できないこともある • Azure
Mobile Sercice (無償の範囲)では、1つのスケジュールジョブからしか送信できない Azure Web Site など ASP.NET アプリ • クライアントと同じC# (VB)を使える • Web Site では制約があったり、有償だったりする Node.js + mongodb など • 自分の得意な言語やミドルウェアで! • この組み合わせだと無料で使えるクラウドサービスも多い
通知要求のリクエスト nodeなどのライブラリを使えば隠ぺいされますが、 他の言語でHTTPリクエストを投げる際に必要になります。 Node.js では、 https://github.com/tjanczuk/wns Azure Mobile Service の
JavaScript Refernceは http://www.windowsazure.com/en- us/develop/mobile/how-to-guides/work-with-server-scripts/?fb=ja-jp (おそらく実体は同じ)
アクセストークンの要求 (C#)
通知要求の送信HTTP ヘッダ • 認証ヘッダ Authorization • wns/toast | wns/badge |
wns/tile | wns/raw X-WNS-Type • cache | no-cache X-WNS-Cache-Policy • Trueにすると、応答でデバイスの状態と通知の状態が返る X-WNS-RequestForStatus • タイル通知のみ。タグを指定 X-WNS-Tag • 通知の TTL (有効期限)を秒で指定。トースト通知では無効 X-WNS-TTL
通知応答のレスポンス ただ送信するだけではなくて、その送信結果がどうだったのか確認しよう クライアントのURLがなくなっているとか 送信量が多いとか WNS側で何か問題があるとか トラブル時の解決に必要な情報がふくまれています
DEMO デバッガとUnitTestを使ったWNSと通信するテスト
通知要求のHTTPレスポンスステータス(抜粋) • OK 200 • アクセストークンが無効 401 • パッケージマニフェストなどの設定が無効(設定バグ) 403
• URIが使えないので、これ以上送信しない 404/410 • 通知が多すぎるので減らす 406 • 通知のサイズが大きすぎる(5KB以上)ので減らす 413 • サポートへ 5xx
通知要求のサンプル(C#)
通知要求の応答とそのハンドル(C#)
まとめ ユーザーに使ってもらうために、Push通知を使ってみよう サーバーサイドの実装は自分の好み、要件に合わせて決めよう 安定して使うには、サーバーサイドの通知の送信を うまくハンドリングしよう