Passbook用パスを自炊してみた

passbook_test2iOS6の新機能の1つにPassbookというのがあります。iPhoneをイベントチケット、交通機関搭乗チケット、ポイントカード、プリペイドカードなどとして利用するもので、サービス毎に個別アプリをインストールしなくても、Passbookアプリの中にそれらをまとめることができます。現行のiPhoneはFelicaやNFCといったおサイフケータイ系ハードを搭載していませんが、画面に表示したバーコードをレジのリーダーに読ませることで自動入力することができます。イベントや搭乗の時間や場所に近づいたら通知センターで知らせたり、それらの変更やプリペイドカードの残高をネットワーク経由でプッシュ更新したりできます。お財布が薄くなる上に様々なリマインド機能もあるのでどんどん活用してみたいのですが、残念ながら日本ではまだ対応サービスがあまりなく、ぐるなびやHOT PEPPERなどの飲食店クーポン程度。そこで、今日「劇場版 魔法少女まどか★マギカ」に行くのを機会に、イベントチケットの自炊をしてみました。

passbook_test

■Passbookパス概要

  • テキストファイル(JSON形式)+各種画像ファイルで構成
  • iOS Developer Program(有料)の開発者証明書で署名しないと実機にインストールできない
  • プッシュ更新には専用サーバーを用意する必要がある
  • 配布はWebからダウンロードやメール添付、もしくはアプリ内で生成する方法がある

という感じ。開発者登録が必要なのはちと残念ですね。とりあえず今回はサーバー更新は必要ないので、「映画館近くまで行ったら発券用の予約番号を通知してくれる」ということを目標にしてみます。

■Apple配布のひな形を改変する

参考資料としては、Appleがこちらで公開している「Passbook プログラミングガイド」を使います。P.8に「開発者向け素材のダウンロード」というリンクがあり、そこを辿ってpassbook_materials.dmgをダウンロードします(要開発者ログインID)。マウントするとPassesフォルダにイベントチケット、クーポン券など目的別のサンプルがあるので、フォルダごとどこか読み書き可能な領域にコピーします。今回はEvent.rawフォルダをコピーして使用。pass.jsonというテキストファイルがメインの定義ファイルとなります。というかこれ以外にはあと画像があるのみです。pass.jsonでハマったのは、以下。

passTypeIdentifier: developer.apple.comであらかじめ取得したpass.com.hoge.passkitみたいなIDを指定。取得方法はアプリIDと同じなので開発者なら迷わず取れるでしょう。

teamIdentifier: ガイドの和訳がいけてないので紛らわしいですが、英数字10桁のアプリIDの前につくアレです。

この2つが証明書のものと同じでないとエラーになります(iPhone上で表示まではいくけど取り込めない)。

serialNumber: シリアルナンバーです。これとPassTypeIdentifierが同一なら同じパスの更新と見なされ上書きされるようです。

webServiceURL: 今回は使用しないのでダミーでいいんですが、https://にしておかないとやはりエラーになって取り込めません。一応無駄パケットはとぶかもなので、自前サーバーなど迷惑のかからないところを指定します。もしかするとこの行自体なくてもいけるのかな?

以下、上のサンプル写真と対比させながら指定していきます。

logoText: 「チケット購入」となっている部分です。Passbookに複数のチケットが入って一覧した時にここが見えるので、もう少し具体的な名前にしておいた方が良かったなと思いました。

relevantDate: イベントや搭乗の日時です。注意すべきは「2012-10-08T16:30+09:00」のようにタイムゾーン指定(この場合は+09:00)が必要な点。また+9:00ではダメで+09:00とする必要があります。

locations: 対象地点です。緯度と経度を指定します。relevantTextフィールドを追加しておくと、通知画面でのメッセージになります(冒頭画像でいう「映画館に近づきました」の部分)。

barcode: バーコード生成部分です。今回は不要ですが一応発券番号を出して見ました。messageが実際のコード。下に数字も出したい場合は、altTextという項目を追加します。行を追加する時はカンマに気をつけましょう。数字はいるけどバーコードが不要な場合は後述のauxiliaryFields辺りに表示しておけば良いでしょう。

organizationNameやdescriptionは券面には反映されないようです。foregroundColor(文字色)、backgroundColor(背景色)はそれぞれRGBの値を0~255で指定します。

eventTicketの下に、primaryField、secondaryFields、auxiliaryFields、backFieldsなどがあり、券面に表示される文字列を指定できます。keyは適当でいいと思いますが重複しない方がヨサゲ。labelが見出しでvalueが内容です。フォントサイズの指定がよくわからず、残念ながら作品名が途中までしか表示できませんでした。サムネイルを無くす手もあるかも。

一応、eventTicket部分をそのまま貼っておきます。auxiliaryFieldsはひな形にはなかったので追加しました。

"eventTicket" : {
    "primaryFields" : [
      {
        "key" : "event",
        "label" : "作品名",
        "value" : "劇場版 魔法少女まどか★マギカ"
      }
    ],
    "secondaryFields" : [
      {
        "key" : "loc",
        "label" : "劇場",
&#1
60;       "value" : "ユナイテッドシネマ豊橋18"
      }
    ],
    "auxiliaryFields" : [
      {
        "key" : "time",
        "label" : "上映日時",
        "value" : "2012-10-06 21:00-23:30"
      }
    ],
    "backFields" : [
      {
        "key" : "terms",
        "label" : "使用仕様上の注意",
        "value" : "試験的に自作したPassbookチケットです。"
      },
      {
        "key" : "website",
        "label" : "劇場アクセス",
        "value" : "http://www.unitedcinemas.jp/toyohashi/about-theater.html"
      }
    ]
  }

■画像について

thumnail.png: 画面右側に出るサムネイルです。サンプルのサイズは112×142でした。

background.png: 背景です。イベントチケットの場合は自動的にぼかしがかかります。サンプルではthumnail.pngと同じもののようでしたので、今回も名前だけかえてコピーして使いました。ちと文字が読みづらいのでもっとスッキリしたものを用意した方がヨサゲですね。

icon.png: 通知センターに表示される時に使われます。29×29。写真一枚目のまどかの顔。

logo.png: 写真中の左上にあるアップルロゴです。30×35。今回はそのまま使用しました。

またそれぞれにRetinaディスプレイ用に縦横倍のサイズのものが必要で、ファイル名の最後に「@2x」をつけます。

 

用意するデータはたったこれだけ。pass.jsonと画像4種x2サイズの9ファイル。これをmadomagi.pass.rawなどと名付けたフォルダに集めておきます。

■電子署名する

先にも書いた通り、iOS Developer Programに加入していることが前提です。まず「キーチェーンアクセス」を起動し、証明書アシスタント->認証局に証明書を要求…を開き、「ディスクに保存」でCertificateSigningRequest.certSigningRequest(いわゆるCSR)というファイルを生成します。これを使ってdeveloper.apple.comで証明書を取得(この辺りは開発者なら手慣れてるでしょうから割愛)。ダウンロードした証明書をキーチェーンアクセスに登録しておきます(CSRは削除してOK)。

次にサイン用のCUIツールsignpassをビルドします。冒頭のキットにXcode用プロジェクトが含まれているので開いてビルドするだけです。出来上がった実行バイナリの見つけ方はガイドに書かれています。ここまでできたらターミナルから、

signpass –p madomagi.pass.raw

とするだけ。問題がなければmadomagi.pass.pkpassというファイルが出来上がります。これがチケットです。

ちなみに、Webサーバーでリアルタイムに生成した場合は、RubyやPHP用の署名ツール実装もあるみたいです。iOSアプリ内で生成する時はPasskitというフレームワークを利用できます。

■Webで配布する

これを単にメール添付でiPhoneで送る分には特に問題ないですが、Webサーバーに置いてSafariからダウンロードする場合は、サーバー側にpkpassという拡張子のMIMEタイプを設定しておく必要があります。Apacheの場合、適切な場所に以下を追記します。今回は/etc/mime.typesに追加しました。

application/vnd.apple.pkpass    pkpass

 

なお、ダウンロードでエラーになったり、表示はされるのにPassbookに取り込めない場合は何かしらエラーになってます。実機ならXcodeのコンソールで見えられます。またiOSシミュレーターに.pkpassファイルをドロップしても検証でき、その際はOSXの「コンソール」アプリでエラーメッセージが読めるので捗りますよ。

■もっと簡単に作ってみたい!

この記事を書き始めてから気付いたんですが、ここにWebフォームで簡単に生成できるジェネレーターがありましたw。もっと簡単にやってみたいって人は挑戦してみて下さい。とはいえ、自分の会員番号や予約番号を外部サーバーにアップするのは自己責任で。あと開発者証明書はどのみち用意しないとダメっぽいです。

べ、別に技術検証したかったんだから悔しくなんかないんだからねっ!

 

開発者IDが必須なのは残念ですが、それさえクリアしてしまえば割と簡単に自炊できることがわかりました。身内のパーティや勉強会などで配布してドヤ顔するのもアリじゃないでしょうか。「入っておくのエレベーターで○階の受付までいって、係に○○と伝えて下さい」みたいな情報を建物前で慌ててメールを探らせることなく自動通知できるなんて素敵ですやん?

当面はiOSしか利用できないので、一般企業がどれくらい参入するのかは未知数ですね。

AirPlay互換ソフトはReflectionよりAirServerがヨサゲ

実家の両親、妹がみんなiPhone使いなんですが、たまに電話で操作方法を聞かれた時に声だけではサポートしきれない時があります。WindowsなんかだとSkypeやリモートアシスタンスといった画面共有サービスを使えば遠隔サポートもしやすいのですが。

そこでふと気付いたんですが、WindowsやMacを擬似的にAirPlay端末にするソフトでiOSの画面をミラーリング表示し、それを画面共有ソフトで見ればよくね?と。あと、iOSアプリ「おやゆびでお」のAirPlay周りのデバッグ作業にも便利ってことで、実家私室のWindows機にも環境構築することに。
Reflectionというアプリが有名ですが、競合のAirServerというのも発見。どちらもMac版とWindows版があります。MacではReflectionを課金済みでしたが、実はこの記事を書き始めるまでWindows版があるとは知らず、今回はAirServerを入れてみました。ちなみにどちらも個人利用なら$14.99(執筆時点で1,223円)ですが、AirServerはSTANDARD LICENCEで5台までインストール可能なようです。アカデミック割引きも。他方、Reflectionは5ライセンスパックが$49.99とあるので$14.99の方はおそらく1台のみでしょう。ReflectionのアドバンテージはWindows XPでも利用できる点でしょうか(逆にMacだとAirServerの方がやTiger/Leopardまで網羅。ReflectionはSnow Leopard以降)。なおどちらもMac版とWindows版は別扱いなので、OSをまたいでライセンス共有はできなそげ。あとはReflectionだと共有画面にiPhoneやiPadのデザインを模したフレームを表示できる点w。プレゼンなんかではちょっとカッコイイかもw。

ともあれ今回はWindows版のAirServerを導入。まずはメールアドレスを登録すると7日間の体験利用ができます。もしくはFacebookアカウントで認証すると、ウォールに宣伝リンクが貼られ、そこから利用者が発生すると3日間の追加使用権がもらえるらしいです(試してないので詳細は不明)。

インストールは簡単。特に設定も不要。デフォルトだと自動スタートアップに登録されます。起動してもタスクトレイにアイコンが出るだけですが、これで準備完了。あとはiOS端末側で普通にAirPlay操作をするだけ。常時起動しているArom+IONの録画機に入れたので処理能力的に不安があったんですが全く問題なし。ほとんど遅延は感じられません。フレームがないので逆に肝心の画面がより大きく見られるのも利点かと。

■勢いでMac版も買い直したった

Mac版Reflectionを先月課金したばかりだったんですが、いくつか不満がありました。製品のバグなのかウチだけの不具合か不明ですが、

  • フルスクリーン表示が解除できない
  • 「おやゆびでお」で動画再生時、レジュームやスキップが不安定

など。しかし、Windows版AirServerだとこれらの問題が全く発生せず。これはもしかして?ということでMac版AirServerも試用してみたところやはり問題なし。ちょっともったいないけどこちらも続けてレジストしてしまいました。

■これから買うならAirServerがオススメ

お互い切磋琢磨してるでしょうから、いつ逆転されるかもわかりませんが、現時点ではAirServerがオススメかな。特に仕様などは購入時点の最新版で確認をして下さい。

AirServerが良い点
  • 1ライセンスで5台にインストール可能
  • PayPal課金した時のメールアドレスを入れればアクティベート完了。シリアルNo入力不要
  • (少なくともウチの環境では)動作が安定している
  • 常駐時、タスクトレイ/メニューバーにアイコン化され扱い易い
  • OSX Tiger、Lerpardで使える
Reflectionが良い点
  • フレームが表示され見栄えが良い
  • ポートレート、ランドスケープ固定など若干オプションが多い
  • Windows XPで使える

 

表示マシン名やパスワードの設定、自動アップデート確認など基本的なものはどちらも対応しています。できればAppStoreで販売してほしいものです。AirPlayに勝手に対応させてるから無理なのかなw?

auレピータ導入完了

IMG_2575auのiPhone5にMNPしたら室内圏外出まくりだったんですが、本日auの電波サポート調査に来ていただき、レピータ設置により改善することができました。

au iPhoneが掴める電波は800MHz(新?)と2GHzがあり、当然プラチナバンドである800MHzの方が一般には建物奥まで届くんですが、ウチの場合800MHzの方の品質がかなり悪く、2GHzは窓際でかろうじて拾えてるという状況でした。ネットでブログ記事をみてると「800MHzの良い電波が来てるのに、端末が(例え弱くても)2GHzを優先的に使おうとするので結果としてつながらず、レピーターでも解決できない」というケースが多かった印象ですが、幸いこれには該当しませんでした。

まずは800MHzレピータを仮設置してもらったところ効果が出ず、続いて2GHzレピーターを設置したところレピータ側での感度はMAX表示。ここから5m程度の範囲では快適に通話が発着信できるようになりました。

ただし、我が家は窓の外が写真のように半地下のようになっており(塀ではない)、これより高い位置に設置しないとMAXにはならないようでした。写真はありあわせの台を作って検証した様子w。この状態で効果が出たので設置Goとなりましたが、これでは外に出られない(^^;)。結局、隣の寝室の棚の上に置いたら同じLevel.9が出たので、そちらに本設置することにしました。

ウチはブロードバンド回線がNTTのBフレッツなので、フェムトセルは導入できず、このレピータがダメならお手上げ状態だったのでほんと助かりました。これで当面auとやっていけそうです。

スマートフォン用スタンド2種レビュー

SDIM0386

先に書いたiPhone5のレビューでも触れた通り、Dockが使えなくなったのが痛いので、スタンドを物色しました。やはり常時垂直に近い状態になっていた方が、ふと着信音が鳴った時に目線で内容を確認したりできて便利なのです。平置きだといちいち手に取ったり身を起こしたりしなければなりません。

選択時に設定した要件は、

  • 挟むタイプやシリコンの粘着力で固定するタイプは除外
  • なにかしらケーブルマネジメントしてくれるとなお良し
  • あまりお高くない(値段)
  • あまりお高くない(物理的な高さ)
  • 基本、黒

辺り。

どのみち自宅と実家に1つずつ欲しかったので、上の2つを同時購入してみました。写真はベッドの枕元部分にある棚に設置した様子。基本、寝る時はここに充電しながら置いておき、何度も手に取ったり置いたりします(←絶望的に寝付きが悪い)。

結論として一番上のアルミ製のものがかなり良かったです。どちらも背部に穴があいていてケーブルを通しておける点、スマートフォンを置く2本のツメの部分に滑り止めパッドがついている点は共通。違うのは材質がアルミとプラスチックという点と、アルミの方は台座部分にも滑り止めがついている点。やはり軽いプラスチック製だとすぐに動いてしまい、狙って置かないとならない感じ。アルミの方は自重もそこそこですが、上に端末の重さがかかったときに、滑り止めパッドにイイカンジに摩擦が発生して安定感が違います。

まぁ、台座に関しては最悪両面テープで止めてしまう手もありますがもうひとつ違うのは、たわみ。あまりないかも知れませんが、台に載せたままちょっと操作をした時、プラ製だとビヨンビヨンしてしまって微妙。

天井があるのもあて、物理高は二番目位の高さの方が良かったんですが、Lightningコネクタが意外と下に出っ張るので、若干つっかえる感があり、この点でも1番目の方がケーブルの曲げ抵抗を感じる事なくスッと置けます。

結果としてプラ製のは写真のようにXperiaSX用にして、実家にはアルミの1番目をもうひとつ調達することにしました。

■買わなかった候補達に関するインスペクション

本ブログは実際に自分で使ってみた商品のレビューが基本ですが、いくつか候補にあがったものについても写真からわかる範囲でコメントを書いてみます。

3番目のSONY製のものは、前述の様にLightningケーブルの突き出し量に対してマージンが足らなそうな気がしたのと、設置面積が狭いので最悪両面テープで固定という作戦が取れない点を気にしました。またお値段もやや高め。

4番目の猫型は面白いので実家用に考えたんですが、やはりケーブルがあって縦置きできないので却下。XperiaSXのようにサイドに充電ポートがある端末用にはいいかも知れません。

5番目のはケーブルマネジメントがしっかりしてて良さそうだったんですが、レビューに接地面がガタつくという書き込みがありちょっと気になったのと、高さ的に冒頭の位置に納まらない可能性を危険視しました。まぁガタつきに関してはさすがに個体差だろうとは思います。たしかヴィレッジヴァンガードで売ってた気がするので今度いったらチェックしてみようかと。

それぞれにカラーバリエーションもあるので、気になった人はチェックしてみて下さい。

iPhone5 ファーストインプレ au 電波編

前に書いた通り、今回はSoftbankからauにMNPしてみました。初日ゲット権を蹴って!一週間待って!その結果やいかに!?

■噂どおりLTEエリアはかなりスポット的

ネットの計測値をみていると、都心部はau、田舎はSoftbank圧勝という傾向が見てとれますが、どうやら横浜は後者の分類されるらしく、LTEが拾える場所はかなりまばら。自宅はもちろん最寄り駅も圏外でした。既存の2.1GHz基地局のソフトウェアを更新すればLTE化できるSoftbankに対し、物理的に設置工事をしていかなければならないauは不利な訳ですが、そんな中でも神奈川はつながらない報告が多い印象。工事リソースが都内優先でアサインされちゃってるんでしょうか…

傾向としてはLTEと3Gのハンドオーバーがかなり遅いというか鈍い印象。移動しながら切り替わると、少し逆方向に戻ってもなかなか復帰しないという感じ。auは3G電波にそこがLTE対応してるかどうかのビーコンを載せて、無駄にLTE電波を探してバッテリーを消費することがない仕組みになってるらしいですが、そのチェック間隔が長いとかいうことなんですかねぇ。一度フライトモードにしてから戻すとLTEでつながったりすることも。

速度はまばらですが15Mbpsが多く、たまに20Mbps近くまで逆に5Mbps位のこともあります。10MHz(75Mbps)らしき速度にはまだ出会えていません。山手線圏内にでもいかないと無理ですかねぇ。

現状、横浜の青葉・都筑周辺では恒常的に使えるものではなく、LTE表示が出てたらラッキーみたいな宝探し的な様相を呈しています。auの公開している対応市町村名をみて期待するのはかなり危険です。現時点でこれだとすると、2.1GHz基地局の設置を待たなければならない可能性も大きいんですかねぇ。LTE面においてはauにしたのは若干敗北感が漂います。今日はSoftbankのイーモバイル買収の話まで飛び出してきちゃいましたしね…

■更に意外と遅い3G (EV-DO)

3Gでももともと規格上、auは3.1MbpsのCDMA2000 1xEV-DO Rev.Aというのを使っておりスピードはさほど期待はできませんでした。ただプラチナバンドで運用されてる場所が多い為、建物奥などでもつながりやすいというのが強みです。そしてiPhone5では2~3バンド束ねて使うことで6.2Mbps~9.2Mbpsのスピードを出せるWIN HIGH SPEED(以下WHS)という方式に対応しているため、基地局が対応している場所では速度アップも望めます。もちろん横浜一帯は既に対応済み。規格上はSoftbank 3Gの21Mbpsには劣りますが、スマートフォンでの体感には充分だろうと。また一般にSoftbankよりレイテンシが高い(反応が素早い)と言われていたのにも期待がありました。

ところが!意外とスピードが出ないorz。測定サイトで1Mbpsいかないことも多い。本当にWHSでつながってるんだろうか?というレベル。電波が混んでて一人に3波をアサインできない状態なんですかねぇ。

また3Gすら掴めないいわゆる○表示も頻発。ただこれは昨日発表されたPRLの更新(3→5)によって若干改善した印象。もしかすると速度も改善してるかも知れないのでまた追って検証してみます。

たださすがだなーと思ったのは、エレベーターの中やいつも電波が入らない某社のトイレの中でもちゃんと圏内のままだったことですね。データ通信としてはともかく電話の着信はしっかりできそうです(まー、あんま電話しないんですけども…)。

■そして案の定、自宅はギリギリ

ウチはちょっと特殊な半地下みたいな作りになっていて元々ほとんどのキャリアが圏外です。Softbankもホームアンテナ2を設置してました。docomoは圏外にはなりませんが弱め(窓際だとXiも入る)。auは数年ぶりでしたがやはりきわどい。窓際の部屋で1,2本。奥の方に行くと○や圏外表示になります。実際に電話を受けられなかったことも。仕方ないのでauにもレピーター設置依頼を出してみました。部屋が散らかりまくってるので調査員の人を招き入れるのはとても憂鬱ですorz。とういかこれでレピーター設置は無理ですって言われたらSoftbankに戻らざるをえないかも知れません。そしたらいったいいくらかかるやら…
ちなみにサーバー設置してる関係で固定回線をKDDI系に替えられないので、フェムトセルは設置不可なんですよねー。調査員は10/4に来てくれるそうなので上手くすれば即日レピーター設置となるはずです。改善されるといいなー。

■テザリング周り

そんなauの12月までのアドバンテージであるテザリング。これはまぁ電波さえ入ればやはり便利です。Xiのテザリングが意外と使い物にならなかったので、さっさとパケホーダイをダブルに変更。これで-3,000円。そしてSoftbankの007zも5円運用に切換て-2,500円。これが3ヶ月早く実施できる分お得という計算だったんですがなんと今日のSoftbankのテザリング開始前倒しで1ヶ月短縮されてしまったw。

また、建物内で使うことが多いテザリングではプラチナバンド(の3G)でも使えることを重視してみました。実際、Softbankとイーモバイルの電波が使える007zでもSoftbankの電波は届かないことが多く、イーモバ利用率が高かった訳です(イーモバのエリアは割と実用的だった)。ところがこれまた本日の発表でイーモバがSoftbankに吸収されたw。まぁ、007zが使う42MbpsエリアとLTEのエリアは違うのでそのまますぐにLTE使えるようになる訳ではないんでしょうが、より周波数が低い1.7GHz帯はプラチナ程じゃないにしても有利なんだろうなぁ。ここでも若干敗北感…

まぁ気を取り直して使用感など。残念ながらせっかく対応した5GHzはテザリングでは使用してくれないらしく、20くらいはざらにESSIDが飛んでおりほとんど空きチャンネルがないこの辺のノマドスポットではちと干渉があってすんなりつながらないことが多いです。iPhone側はMac側のWi-FiをOFF/ONしたりしてるウチにいつのまにかつながるって感じ。数分もたつくこともザラです。そんな状況下でも、同じ2.4GHz電波を使うBluetoothテザリングならあっさりつながったり。ただしこちらは速度があまり出ない。またLightning-USBケーブルで直結すればUSBテザリングも可能。USBとWi-Fiはまぁ同じ位のスピードですかね。iPhoneの充電もできるので一石二鳥ではありますが、ケーブルがもっと短いものや巻き取り式のものが欲しくなります。いずれにせよルーターを別に持ち歩く必要がなくなることはモバイラーにとって嬉しい限りです。ただまぁその分、予備バッテリーは必要になるのかも知れません(笑)。なんかもう最後の砦になりつつあるバッテリー持ちの良さでau版の本領を発揮してほしいものです。