カテゴリー ‘ WEB/DB

APNs本番サーバーでPush通知できない!

APNs(Apple Push Notification Service)のテストをしたのだが、本番(Production)で動かすとPush通知が来ない現象がおこった。大まかな構成は...

  1. iOS用アプリ・・・APNsよりトークンの取得、APNsからのPush通知の受け取り
  2. プロバイダー(Webサーバー)・・・任意デバイスへのPush情報をAPNsに送信

尚、iOSアプリは「Ad Hoc」、プロバイダーは「ApnsPHP」を使用した。

APNsの仕組みや具体的な実装については、「iPhoneアプリで稼げるのか」さんが、ApnsPHPは、「PROGRAMMING NOTE」さんが、それぞれ詳しく解説されていてとてもありがたい。

Development用に実装した場合は若干手間取るものの、デバイスに通知がされることを確認できた。(プロバイダーで使用したファイルは、sample_push.phpとsample_feedback.php)

ただ、Production用にアーカイブを作成して実機テストをしてみると、うんともすんとも言わない...

一旦、Provisioning Portal で該当するApp IDのPush SSL CertificateをProduction用だけにして再作成し、Distribution Provisioning Profileも再作成した。また、.pemファイルも再作成してみたが、改善しなかった。(これらについては結果的に効果があったかどうかは不明)

さて困ったと、いろいろ調べて行くと下記の部分が問題であることが分かった。

■デバイス識別トークンは開発用と本番用は違うものが発行される。
早速実機上で再度トークンを取得してみると確かに開発用と違うものが返された。

■そもそもAPNsサーバーは開発用と本番用は違う。
これは完全に見落としていた。sample_push.phpとsample_feedback.phpの定数「ENVIRONMENT_SANDBOX」を「ENVIRONMENT_PRODUCTION」に変更した。

これで通知されるようになりました。また、開発用では、フィードバックが取得できていなかったのだが、本番用では取得できた。
あー、すっきりした。
Xcode4.5.1, OS X10.7.5, iOS5.1, Apns-PHPr100

10.8 Mountain Lion の secure.log どこいった?

SSHのアクセスログを見ようと思ったら/var/secure.logが見つからない? あれ?どこだっけ?って探すと、 OS X 10.8 Moutain Lionからはどうやら、/var/system.logに吐かれるようになったみたいだ。微妙に変わっているなぁ。

それから、Moutain Lionにアップブレードをする時に、OS Xで「ウェブ共有」+ PHPでウェブを公開している場合は、一旦共有をやめてからアップグレードした方が懸命かと思われます。アップグレードをすると、なぜか一旦ApacheのモジュールからPHPが除外されます。そのためPHPファイルにアクセスすると設定によってはそのままPHPのソースコードが丸見えになり、パスワードなどを記載したコンフィグファイルなどは大公開の大判振る舞い状態になっちゃいます...

return top