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で非同期で送りたくなるくらい重い。)

どこかで再インストールフラグを設けた方がいいのかなーなんて考えたけどめんどいなって思ったぼくでした。
macbookPRO 2012-mid 13inc
iMac 2010-mid 21.5inc

二つを持っていました。
macbookにはデフォルトの2Gのメモリが2スロット、計4G積んでいたのですがメモリ不足に悩まされ4Gメモリを2つ買ってきました。合わせて9000円ほど。

macbookにデフォルトで積まれていた2GのメモリをiMacに流用できないかなーと思って差し込んでみたところ無事動きました。

source treeというクライアントソフトがあるみたいだけどクローンするためには空のフォルダ用意してね!とか言われたんだが、こちとらもうプロジェクトファイルあるんやで!と。

どうやらgit initはクライアントソフトからできないようだ。
git cloneからスタートする模様なので、もうフォルダがある今回はコマンドラインから。


titaniumのプロジェクトフォルダ内で
git init
git add .
git commit

remoteの設定。

git remote add https://{ACCOUNT}@bitbucket.org/{ACCOUNT}/{PROJECT}.git
git push -u origin master