2012年01月21日
iOSのPush Notification @ iPod touch
ちょっと填ったので、忘れないようにメモして置きます。
結論から書くと、iOSのPush Notificationをレンタルサーバーでやろうとした事が良くなかったみたいです。開発環境のMacでやると無事出来ました。
面倒な点としては、証明書を用意しなければ成らない事。Googleで検索すると幾つか方法が書かれてあるサイトがありましたが、何故か面倒なやり方になっていて、それらを真似たら上手く行かず、結局はAppleのPDF「Local NotificationおよびPush Notificationプログラミングガイド」に書かれてある方法が分かりやすかったです。特に重要なところは、キーチェーンアクセスから書き出す時の「証明書と鍵の両方を選択して」って所ですね。この部分が他の資料では書かれてなかったり、方法が違っていたりしてその後の手順が面倒になってました。結局はAppleのドキュメントが一番って事ですね。
それから、Mac以外で構築する場合、ルート証明書って奴が必要みたいで、これがファイルを置いただけだとダメなのかな。証明書関係はイマイチよく分かってないので、自分には出来ませんでした。hetemlで出来る様に成れば嬉しいんだけどな。教えて偉い人。
追記:
何処かに資料があるのかも知れませんが、文字数制限に関して。
送信可能文字数:201(日本語の場合 33)
待ち受け画面のアラート表示:108
待ち受け画面上の一覧表示:144
ホーム画面の上のアラート表示:41
ホーム画面表示上の一覧表示:152
送信可能文字数に関してはペイロードに含むモノによっては違いますが、上記の数字は「iPhoneアプリ開発 熟達テクニック」のサンプルを実際に動かして試した場合です。
追記2:
上記の日本語の場合の文字数が少なくなっている問題が分かりました。サンプルで ペイロードの文字列作成で json_encode() が使われているのですが、このままだと、日本語の文字列がユニコードエスケープシーケンスと成ってしまい、その分だけ文字列が長くなり、送れる文字数が少なくなると言う事のようです。
実際、他のアプリのAPNSの通知を見ていると、日本語が33文字なんて事は無くもっと長く、alertに入れている文字列はもっと長いです。おそらく、JSONを作る時にユニコードエスケープシーケンスしてないか、json_encode()した結果からエスケープしてない形に戻しているのかなと言う気がします。そもそも、json_encode()のオプションでエスケープしないように出来るかなと思って試したのですが、どうも上手く行かなかったので、不本意ですが、エスケープしてない形に戻す形で実験しました。効率からすると、この程度だったら、json_encode()を使わない方が良いかも。
ちなみに実際にやった方法は、
$payload = unicode_encode(json_encode($payloadDict));
こんな感じで、unicode_encode() は下記のサイトから頂いてきました。
PHPでユニコードエスケープ(unicode_encode, unicode_decode代替) - はて日記
>>関連リンク
と言うわけで、日本語の文字数で再度調べたデータを書いておきます。但し上記と条件が違っていて、書籍の記述にあったアプリ独自の記述は外し、alertのメッセージ文と"sound":"default"だけの記述にしています。
送信可能文字数:72
待ち受け画面のアラート表示:59
待ち受け画面上の一覧表示:制限まで届かず(スペース的には80)
ホーム画面の上のアラート表示:22
ホーム画面表示上の一覧表示:制限まで届かず(スペース的には84)
一覧表示時は何れも表示エリア目一杯まで届かず、"sound":"default"を外した場合も、日本語(Unicode)で6文字分にしかならないので、表示上の制限を気にする必要は無さそうです。それよりも、アラート表示の時の文字数が、特にホーム画面上の場合は、22文字しか入らないので、内容によっては文字数を気にした方が良さそうです。
関連日記
- 2012年05月05日 iPhoneアプリのローカライズ (49254)@ iOS
- 2012年02月17日 Unityでカメラを使ったiOSアプリ (10915)@ Mac
- 2013年11月24日 iBeaconを試す(1) 対応ビーコンとアプリ (7232)@ iOS
- 2014年06月09日 3DなマーカーでAR (6726)@ 3D
- 2013年12月08日 iBeaconを試す(3) Core BluetoothとMavericks (6724)@ Mac
- 2011年11月10日 ケータイ端末向けのFlash Player開発終了 (6552)@ Flash
- 2012年10月19日 Lightweight SWF (6524)@ Flash
- 2010年01月15日 VMware上のXP、ボリュームを拡張 (6025)@ Windows
- 2012年03月02日 QualcommのARライブラリー「Vuforia」 (5331)@ Mac
- 2010年10月03日 Settings.bundleのデフォルト値 (4572)@ 携帯電話
- 2014年06月01日 MyBeacon Fun(MB005)が届いた (4222)@ iOS
- 2014年10月10日 ASAHIネット LTEを暫く使ってみての感想 その3 (4203)@ iOS
- 2011年06月29日 FlashからHTML5へのコンバータ「Swiffy」 (4120)@ Flash
- 2005年03月06日 PHPObjectでマルチバイト (4005)@ Flash
- 2012年02月26日 GLKSkyboxEffectの画像作成 (3954)@ Shade
- 2014年08月09日 iOS7でGKVoiceChatServiceとGKSession (3804)@ iOS
- 2010年11月21日 WindowsでiOSアプリ開発 (3773)@ Flash
- 2006年08月01日 広島大学理学部数学教室公開講座 (3731)@ 雑
- 2012年10月18日 二次元バーコード読み取りライブラリー「ZXingObjC」 (3680)@ iOS
- 2011年05月13日 FlashかHTML5か (3637)@ Flash
- 2007年11月16日 レミーのおいしいレストラン (3564)@ 映画
- 2014年08月09日 iVOCALOIDで遊んでみた (3534)@ iOS
- 2014年09月28日 ASAHIネット LTEを暫く使ってみての感想 その2 (3494)@ iOS
- 2013年04月25日 [Unity] TouchScript (3435)@ 3D
- 2011年03月24日 Adobe AIR 2.6 (3427)@ Flash
- 2011年05月06日 iOSシミュレータのカメラロールに画像を保存 (3392)@ Mac
- 2005年07月20日 世界の中心で、愛をさけぶ 完全予約限定生産DVD-BOX (3327)@ 映画
- 2010年11月30日 iPad Camera Connection Kit (3327)@ 音楽
- 2008年09月17日 Papervision3Dとアナグリフ (3289)@ Flash
- 2011年03月05日 OpenCV祭り (3252)@ Mac
アマゾン広告
この日記ページは閲覧数などの条件に応じて、閲覧制限を行っています。他からリンクしていただいても、そのリンクから辿った閲覧者が当ページの内容をご覧頂けない場合があります。ご了承下さい。