iPhoneへのプッシュ通知を行う際に、APNs-PHPというライブラリを使って通知ロジックを仕掛けていました。
スクラッチ開発する場合に参考にしたサイトに書いてあったような、通知制限などを自動的に回避してくれる的なことがあったためにAPNs-PHPを使ったのですが、
導入に際してはこちらを参考にすればさほど難しいこともなく、普通に導入できました。
余談ですが、今回はAjaxを使って通知を実装したために、APNs-PHPで標準出力に自動ではき出すログの扱いに非常に困ったというか、どうしてやろうかと思ったわけですが、管理者的にはログが見れた方が良いのかなと思い、取得したログを成形してログ通知領域に見えるようにはき出してやりました。
それと共にDBにログを吐いたDevice Tokenの登録IDを保存しておいて、とりあえず後で眺めてみようと思っています。
まだテスト段階なのでどれくらいエラーを吐いてくるかわかりません。
で、ハマった内容ですが、バッジの消去です。
アプリ側で操作しても良かったのですが、バッジ付加できるくせに、消すことできねーじゃんってのが妙に気になって、あれこれと探したのですが、今現在では導入部分の参考資料は山ほどあるのですが、肝心のAPNs-PHPのお作法的な文献がまだ数が少ないようで、ある程度の資料しか出てきません。
そんな中こちらのスレッドで「Message.php」を編集すればいけんじゃね?」って書き込みを見つけたのですが、それでなんとか通知を消すことが出来ました。
「ApnsPHP」フォルダ→「Message.php」の318行目付近にある
if (isset($this->_nBadge) && $this->_nBadge > 0) { $aPayload[self::APPLE_RESERVED_NAMESPACE]['badge'] = (int)$this->_nBadge;
この部分を
if (isset($this->_nBadge)/* && $this->_nBadge > 0*/) { $aPayload[self::APPLE_RESERVED_NAMESPACE]['badge'] = (int)$this->_nBadge;
のように変更しました。「>=」でもよかったのですが、ここは先人のコードをそのまま利用させて頂きました。
ただ、このようにするとバッジは消えるのですが、通知がサイレントで行われてしまいます。
いきなりバッジだけが消えてしまうような動作になってしまいます。
メッセージも現れなければ、音も鳴らない。まぁ、いいんですけど。今回は・・・
さらに、別の問題でAPNs-PHPで
$message->setBadge(+1);
としても、現在のバッジ数+1にはなってくれない・・・
そこは何か資料がないかなぁ・・・それかAPNs-PHPがバージョンアップしてくれないかな。