2012年11月22日木曜日

PassBook生成PHPライブラリー PHP-PKPassの使い方 〜実装編〜


1.今回は前回の準備編で用意した諸々のファイルと情報をプログラムに組み込んで行きたいと思います。
 前回、サーバーにアップロードしたファイルのexample.phpをベースに説明して行きたいと思います。
 目標としては、
 ・作ったクーポンが表示される
 ・作ったクーポンがPassbookに登録される
 以上2点とします。詳しいカスタマイズについては特に説明しません。

2.準備編で作った、
 ・.p12ファイル
 ・.pemファイル
 の2点をサーバーにアップロードします。
 場所はどこでもいいですが、できればドキュメントルートの一つ上の階層等、ブラウザからアクセスできない場所がいいかもしれません。

3.example.php修正必要箇所
[Line 6:]・・・.p12ファイルへのパス
[Line 7:]・・・.p12の展開に必要なパスワード
[Line 8:]・・・WWDR intermediate certificateの.pemファイルへのパス
[Line11:]・・・新たに作ったPass Type ID
[Line15:]・・・teamIdentifier

以上です。


備考:
 現象として、「クーポンは表示されるがPassbookに入らない!」という事があります。
 原因としては、.p12とPass Type IDがマッチしていない場合が多いようです。

 原因を調べる方法としては、
 1.PKPass.phpの222行目の「$this->clean();」をコメントアウトする。
  そうすると、tmpフォルダ内にクーポンのファイル[pass.pkpass]が残ります。
 2.pass.pkpassをローカルにダウンロードしておき、iOS Simulator(iOS6以降)とコンソールを起動。
 3.立ち上がったiOS Simulatorにダウンロードしたpass.pkpassをドラッグ&ドロップ。
 4.そうすると、コンソールに、
 
 yy/mm/dd hh:ii:ss passd Invalid data error reading card pass.xxxxxxxx.jp.xxxxxx/xxxxxx-xxx-xxx. The passTypeIdentifier or teamIdentifier provided may not match your certificate, or the certificate trust chain could not be verified.
 
 といったメッセージが表示される事があります。
 このメッセージの意味としては、「passTypeIdentifierまたはteamIdentifierが証明書(.p12)とマッチしてないかも?」といった意味合いかと思います。
 そういった場合、準備編で説明した.p12を作り直したりしてみると改善する場合があります。

PassBook生成PHPライブラリー PHP-PKPassの使い方 〜準備編〜


1.ファイル本体のダウンロードとアップロード
 https://github.com/tschoffelen/PHP-PKPass
 このサイトにアクセスし、[ZIP]ボタンをクリックしダウンロード。
 ダウンロードしたzipファイルを展開すると以下の内容が入っています。

 example.php
 full_sample/
  ┣icon.png
  ┗index.php
 images/
  ┣icon.png
  ┣icon@2x.png
  ┗logo.png
 PKPass.php
 readme.md
 starbucks_sample/
  ┣background.png
  ┣icon.png
  ┣icon@2x.png
  ┣index.php
  ┣logo_web.png
  ┗logo.png

 これらのファイルをサーバーにアップロードします。
 ※アップロードしたフォルダにtmpフォルダを作成しパーミッションを777にしておいてください。


2.下準備 〜その1〜
 このクラスを使うにはいくつかファイルといくつかの情報を用意する必要があります。

 1.Pass Type IDsの用意
 https://developer.apple.com/ios/manage/passtypeids/index.action
 にアクセスし、新たにPass Type IDを作成します。












 



 2.DescriptionとIdentifierを入力します。
  Identifierの形式はpass.domainname.passnameとします。
  Descriptionはただの説明なので自分が分かりやすければなんでもOK。
















 3.Submitすると、Pass Type IDsの一覧に戻りますので、2で追加したものがあるか確認して下さい。
  次に、新たに登録したPass Type IDの生成作業を行いますので右側のConfigureリンクをクリックします。
  画面が変わったらConfigureボタンをクリックします。

















 4.[Generate a Certificate Signing Request]という画面が表示されます。
  ここでPass Type IDに署名する証明書を生成します。
  [Continue]ボタンをクリックすると、「証明書をアップしてくれ!」といわれるので、


















  http://blog.img-src.jp/2012/03/iphone.html
  の1)でFinderに保存した拡張子が[certSigningRequest]のファイルをアップロードします。



















 5.画面が代わり、「Your Pass Certificate has been generated.」と表示されれば完了です。
  [Continue]ボタンをクリックし、画面上部の[Download]をクリックすると、
   ・pass.cer
  というファイルがダウンロードされます。



















 6.ダウンロードしたpass.cerをダブルクリックすると、Keychainが立ち上がります。
  左側のキーチェーンを[ログイン]、分類を[自分の証明書]とすると追加された証明書が分かりやすいです。
  「Pass Type ID:(2.でいれたIdentifier)」という証明書がそれです。
  この証明書の上で右クリックし、「Pass Type ID:(2.でいれたIdentifier)を書き出す」を選択し、
  フォーマットを「個人情報交換(.p12)」を選択し、適当な名前で保存して下さい。














 7.この.p12ファイルを保護するためのパスワードを求められるので、適当なパスワードを2回入れ、「OK」をクリックして下さい。
  この際、入力したパスワードは後ほど使用しますので、忘れないようにしてください。

 8.teamIdentifierの取得
  https://developer.apple.com/ios/manage/passtypeids/index.action
  にアクセスし、上で新たに作ったPass Type IDの右側の[confirure]をクリックします。
  [ID]というピクトの右側にある「(10桁の英数).(2.でいれたIdentifier)」の10桁がteamIdentifierですので、控えておきます。
















3.下準備 〜その2〜
 1.https://developer.apple.com/ios/manage/certificates/team/index.action
  にアクセスし、WWDR intermediate certificateをダウンロードします。
















 2.ダウンロードしたAppleWWDRCA.cerをダブルクリックすると、Keychainが立ち上がります。
  左側のキーチェーンを[ログイン]、分類を[証明書]とすると追加された証明書が分かりやすいです。
  「Apple Worldwide Developer Relations Certification Authority」という証明書がそれです。
  この証明書の上で右クリックし、「Apple Worldwide Developer Relations Certification Authorityを書き出す」を選択し、
  フォーマットを「PEM形式(.pem)」を選択し、適当な名前で保存して下さい。













以上で準備は完了です。



まとめ

・Pass Type IDを新たに作る
・新たに作ったPass Type IDの証明書から作った「.p12」ファイルを用意する
・「.p12」ファイルのパスワード
・teamIdentifierを控えておく
・Apple Worldwide Developer Relations Certification Authorityから作った「.pem」ファイルを用意する



次回は実際にassBook生成PHPライブラリー PHP-PKPassの使い方を説明します。