iOSにはアプリ内のローカルで設定した時刻に表示するlocalPushNotificationと、サーバーリモートからPush通知するPushNotificationがあります。
サーバーからPush通知するにはApns_PHPというライブラリがおすすめ。
https://github.com/duccio/ApnsPHP
基本的な使い方は他のブログなどを参考にしてください、ということで今回はハマったところとか、個人的なカスタマイズとか。
[Adhocを使う]
開発環境では動いたのに本番で動かない!なんてことのならないように、Adhocモードで本番確認しましょう。
[Abstract.phpを修正]
なぜか動かない場所があります。修正します。
$streamContext = stream_context_create(array('ssl' => array(
// 'verify_peer' => isset($this->_sRootCertificationAuthorityFile),
// 'cafile' => $this->_sRootCertificationAuthorityFile,
'local_cert' => $this->_sProviderCertificateFile
)));
上記のようにコメントアウトで対策。
[ApnsLoggerを作成]
Apns_PHPオブジェクトにsetLoggerしてあげないと、そのままテキストでログを吐かれてしまいます。
class ApnsLogger implements ApnsPHP_Log_Interface{
public function log($message){
}
}
なにもしないので空の関数ですね。
ファイルログに出力したり、適宜この関数内部を触ればいいと思います。
あとは使うところで、ApnsLoggerをnewしてあげて、Apns_PHPオブジェクトにsetLoggerしてあげればいい感じです。
[feedbackを使う]
Apns_Feedbackというクラスも存在します。
push通知して失敗した端末のdeviceTokenはここで取れます。
Apns_Feedbackオブジェクトにreceiveというメソッドがついていて、失敗したdeviceTokenリストが取得できます。
なお、一度取得したらキャッシュがクリアされ次回は取得できません。
push通知できなかった場合ってどういう状況?とちょっと実験してみたのですが、
アンイストール -> 失敗。feedbackで取得可能。
通知コントロールOFF -> 成功。feedbackで取得不可。
という結果で、feedbackで受け取れるdeviceToken = アンインストールユーザー、という認識で良さそうです。
ただ、再度インストールした場合、deviceTokenは前回のものと同じものを使用するようなので、
feedbackで取れたdeviceTokenには今後二度と送らない、という処理を入れるとちょっとまずいかもしれないですね。
かといって、不用なPNは送りたくない。
(PNが重い。nodejsで非同期で送りたくなるくらい重い。)
どこかで再インストールフラグを設けた方がいいのかなーなんて考えたけどめんどいなって思ったぼくでした。
サーバーからPush通知するにはApns_PHPというライブラリがおすすめ。
https://github.com/duccio/ApnsPHP
基本的な使い方は他のブログなどを参考にしてください、ということで今回はハマったところとか、個人的なカスタマイズとか。
[Adhocを使う]
開発環境では動いたのに本番で動かない!なんてことのならないように、Adhocモードで本番確認しましょう。
[Abstract.phpを修正]
なぜか動かない場所があります。修正します。
$streamContext = stream_context_create(array('ssl' => array(
// 'verify_peer' => isset($this->_sRootCertificationAuthorityFile),
// 'cafile' => $this->_sRootCertificationAuthorityFile,
'local_cert' => $this->_sProviderCertificateFile
)));
上記のようにコメントアウトで対策。
[ApnsLoggerを作成]
Apns_PHPオブジェクトにsetLoggerしてあげないと、そのままテキストでログを吐かれてしまいます。
class ApnsLogger implements ApnsPHP_Log_Interface{
public function log($message){
}
}
なにもしないので空の関数ですね。
ファイルログに出力したり、適宜この関数内部を触ればいいと思います。
あとは使うところで、ApnsLoggerをnewしてあげて、Apns_PHPオブジェクトにsetLoggerしてあげればいい感じです。
[feedbackを使う]
Apns_Feedbackというクラスも存在します。
push通知して失敗した端末のdeviceTokenはここで取れます。
Apns_Feedbackオブジェクトにreceiveというメソッドがついていて、失敗したdeviceTokenリストが取得できます。
なお、一度取得したらキャッシュがクリアされ次回は取得できません。
push通知できなかった場合ってどういう状況?とちょっと実験してみたのですが、
アンイストール -> 失敗。feedbackで取得可能。
通知コントロールOFF -> 成功。feedbackで取得不可。
という結果で、feedbackで受け取れるdeviceToken = アンインストールユーザー、という認識で良さそうです。
ただ、再度インストールした場合、deviceTokenは前回のものと同じものを使用するようなので、
feedbackで取れたdeviceTokenには今後二度と送らない、という処理を入れるとちょっとまずいかもしれないですね。
かといって、不用なPNは送りたくない。
(PNが重い。nodejsで非同期で送りたくなるくらい重い。)
どこかで再インストールフラグを設けた方がいいのかなーなんて考えたけどめんどいなって思ったぼくでした。