質問: " + e.message); }); push.on('notification', function(data) { console.log('notification event'); navigator.notification.alert( data.message, // message null, // callback data.title, // title 'Ok' // buttonName ); push.getApplicationIconBadgeNumber(function(count) { console.log('get badge : ' + count); count++; push.setApplicationIconBadgeNumber(function() { console.log('set badge : ' + count); }, function() { console.log('set badge error'); }, count); }, function() { console.log('get badge error'); }); }); } }; ``` ### 試したこと プッシュ通知の送信サーバー側で content-available=1 を設定しても、しなくても、動作に変化はありませんでした。 ### 補足情報(言語/FW/ツール等のバージョンなど) crodova version : 7.1.0 platform iOS : 4.5.4 phonegap-plugin-push : 1.10.6
回答: 自己解決できました。 ただし、アプリがNot running、つまり起動していない時は バッジの値を更新できません。 おそらく実現不可能と思われるので、仕様だと思って、あきらめます。 どうしてもNot runningの時にバッジを更新したいなら、 送信サーバー側でbadgeを指定すれば、できると思います。 以下、解決方法です。 ■1 Background Fetchのプラグインを使う。 つまり、config.xml ファイルに を設定する ■2 アプリのバックグラウンド更新を有効にする。 iPhoneの 「設定」→「一般」→「Appのバックグラウンド更新」 から、対象となるアプリのバックグラウンド更新を有効にする。 ■3 送信データにcontent-available=1とidを設定する 下記は、送信データの一例 { \"aps\": { \"alert\": \"Hello World\",\"content-available\": 1 }, \"id\" : 3 } この例では、id=3に設定した。 このidは、次のpush.finish関数で使用する。 ■4 push.finish関数を追加する。 push.on('notification', function(data){}); の関数に、下記のように追加する。 data.additionalData.の後に続くidは、先述の送信データのidと名前を一致させる。 (push.finishの仕様も確認してもらえれば分かると思います) ``` push.on('notification', function(data) { console.log('notification event'); navigator.notification.alert( data.message, // message null, // callback data.title, // title 'Ok' // buttonName ); push.getApplicationIconBadgeNumber(function(count) { //alert('get badge : ' + count); console.log('get badge : ' + count); count++; push.setApplicationIconBadgeNumber(function() { console.log('set badge : ' + count); }, function() { console.log('set badge error'); }, count); }, function() { console.log('get badge error: ' + count); }); //alert('notId: ' + data.additionalData.notId); console.log('notification id: ' + data.additionalData.id); // do something with the push data // then call finish to let the OS know we are done push.finish(function() { console.log("processing of push data is finished"); }, function() { console.log("something went wrong with push.finish for ID =", data.additionalData.id) }, data.additionalData.id); }); ```