Symfoware

Symfowareについての考察blog

Cordova GCMからのプッシュ内容を通知領域に表示する

Cordovaでプッシュ通知を受け取るアプリケーションを作成してみました。
Cordova GCMから送信したAndoroidのプッシュ通知を受け取るアプリケーションの作成

アプリケーションが起動していない時は通知領域に表示したいんだけど、
どうやるんだろ?と思い調べてみました。

結論、前書いたプログラムは一部バグがあります。


Cordova側



アプリケーションをこんな感じに修正しました。


  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <meta charset="utf-8" />
  5.     <meta name="format-detection" content="telephone=no" />
  6.     <meta name="msapplication-tap-highlight" content="no" />
  7.     <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />
  8.     <title>Push!</title>
  9. </head>
  10. <body>
  11.     <h1>Pushテスト</h1>
  12.     <ul id="app-status-ul"></ul>
  13.         
  14.     
  15. <script type="text/javascript" src="cordova.js"></script>
  16. <script type="text/javascript" src="lib/jquery-2.1.3.min.js"></script>
  17. <script type="text/javascript">
  18. $(function() {
  19.     var pushNotification;
  20.     document.addEventListener("deviceready", function(){
  21.         pushNotification = window.plugins.pushNotification;
  22.         
  23.         // Android 通知の登録が成功した場合
  24.         var successHandler = function successHandler(result) {
  25.             $("#app-status-ul").append('<li>result = ' + result + '</li>');
  26.         };
  27.         
  28.         // 通知の登録が失敗した場合
  29.         var errorHandler = function(error) {
  30.             $("#app-status-ul").append('<li>error = ' + error + '</li>');
  31.         };
  32.         
  33.         $("#app-status-ul").append('<li>registering ' + device.platform + '</li>');
  34.         if ( device.platform == 'android' || device.platform == 'Android' || device.platform == "amazon-fireos" ){
  35.             pushNotification.register(
  36.             successHandler,
  37.             errorHandler,
  38.             {
  39.                 // ここをSender ID(プロジェクト番号)に変更
  40.                 "senderID":"1234568790",
  41.                 "ecb":"onNotification"
  42.             });
  43.         } else {
  44.             // Android以外は試せないので保留
  45.         }
  46.     });
  47. });
  48. // androidの通知
  49. function onNotification(e) {
  50.     $("#app-status-ul").append('<li>EVENT -> RECEIVED:' + e.event + '</li>');
  51.     switch( e.event ) {
  52.     // GCMへの登録完了
  53.     case 'registered':
  54.         // IDが変わることはなさそうなので、この処理は初回だけでよい?
  55.         if ( e.regid.length > 0 ) {
  56.             $("#app-status-ul").append('<li>REGISTERED -> REGID:' + e.regid + "</li>");
  57.             console.log("regID = " + e.regid);
  58.         }
  59.         break;
  60.     // プッシュ通知受信
  61.     case 'message':
  62.         
  63.         // アプリケーション起動時に受信した場合
  64.         if ( e.foreground ) {
  65.             $("#app-status-ul").append('<li>--INLINE NOTIFICATION--' + '</li>');
  66.             console.log("=== message.foreground ===");
  67.         } else {
  68.             
  69.             // 通知領域からの新規起動
  70.             if ( e.coldstart ) {
  71.                 console.log("=== message.background.coldstart ===");
  72.             
  73.             // 通知領域からバッググラウンドにいたアプリを呼び出し
  74.             } else {
  75.                 console.log("=== message.background.non coldstart ===");
  76.             }
  77.         }
  78.         $("#app-status-ul").append('<li>MESSAGE -> MSG: ' + e.payload.info + '</li>');
  79.         //Only works for GCM
  80.         $("#app-status-ul").append('<li>MESSAGE -> MSGCNT: ' + e.payload.msgcnt + '</li>');
  81.         //Only works on Amazon Fire OS
  82.         $status.append('<li>MESSAGE -> TIME: ' + e.payload.timeStamp + '</li>');
  83.         break;
  84.     case 'error':
  85.         $("#app-status-ul").append('<li>ERROR -> MSG:' + e.msg + '</li>');
  86.         break;
  87.     default:
  88.         $("#app-status-ul").append('<li>EVENT -> Unknown, an event was received and we do not know what it is</li>');
  89.         break;
  90. }
  91. }
  92. </script>
  93. </body>
  94. </html>






メッセージを送信する側のPythonプログラムです。


  1. # -*- coding:utf-8 -*-
  2. from gcm import *
  3. gcm = GCM("AIzaSyDC3yeYa47F267GxWcMAmxxxxxxxxxxxx")
  4. data = {'message': u'こんにちは!', 'info':u'通知の詳細です'}
  5. reg_id = 'APA91bERFupO8ovBJVQ9zHwlO404SbFTYnKXIfvxxxxxxxxxx'
  6. gcm.plaintext_request(registration_id=reg_id, data=data)





アプリケーションを起動した状態でメッセージを通知。

574_01.png

message.foregroundの分岐を通過し、通知領域には何も表示されません。


ホームボタンを押してアプリケーションを非表示に。
再度、Pythonのプログラムで通知を送ると、ちゃんと通知領域にアイコンが表示されます。

574_02.png


通知領域には、Pythonから送るとき「message」で指定した内容が表示されます。
これは固定の模様。

574_03.png

通知領域のアイコンをクリックしてアプリを起動すると
message.background.non coldstartの分岐を通過します。


戻るボタンを押してアプリを終了。
上記と同じ手順で通知を送った後、通知領域からアプリを起動すると
message.background.coldstartの領域を通過します。



通知領域からではなく、通常と同様のアプリ起動を行うと、
通知メッセージは取りこぼすようです。

574_04.png


ちゃんとマニュアル読まないとダメですね。

関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/03/01(日) 18:12:27|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<R言語 summary(最大、最小、平均、中央値)の結果を数値で取得する | ホーム | Cordova GCMから送信したAndoroidのプッシュ通知を受け取るアプリケーションの作成>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1662-61fe722f
この記事にトラックバックする(FC2ブログユーザー)