[iOS]PKPassファイル作成およびWalletへの追加

12805 ワード

1、PKPassファイルとは何ですか.
PKPassは、Appleが定義した業者向け消費券、クーポン、列車の航空券などの手形フォーマットファイルです.含む:アイコンicon、サムネイルthumbnail、logoの外で最も重要なのはpassである.json、manifest.jsonやsignatureなどのファイルの圧縮パッケージ
2、PKPassファイルの作成方法
1)、サーバー側作成は比較的一般的な方法です.ここにJavaが書いたオープンソースライブラリがあります.JavaバージョンでPKPassを作成するwebサービス2)、ローカル作成は以下の手順に従います.
1、アップルの開発者のウェブサイトに行ってPass Type idを申請し、また、対応する証明書(申請前にキー列:証明書発行機関から証明書を要求する必要がある)2を生成し、pass.json aを作成し、icon、logo、stripの3種類のピクチャbを準備し、pass.jsonを構成する.ここではpassTypeIdentifierとteamIdentifiierを強調する.前者は開発者センターで作成したPass Type ID("pass.com.taokatao.mywallet」というように、後者は対応するチームIDで、アップルの開発者アカウントを申請する際に唯一のチームIDが割り当てられます(アップル開発者センター–アカウント情報を見て「Team ID」を見ることができます).その他の情報は実際の状況に応じて構成されています.
{
    "formatVersion": 1,
    "passTypeIdentifier": "pass.com.taokatao.mywallet",
    "serialNumber": "54afe978584e3",
    "teamIdentifier": "MV9CCWC8NT",
    "authenticationToken": "bc83dde3304d766d5b1aea631827f84c",
    "barcode": {
        "message": "userName CangyuZheng",
        "altText": "       ",
        "format": "PKBarcodeFormatQR",
        "messageEncoding": "iso-8859-1"
    },
    "locations": [
        {
            "longitude": -122.3748889,
            "latitude": 37.6189722
        },
        {
            "longitude": -122.03118,
            "latitude": 37.33182
        }
    ],
    "organizationName": "CardMee",
    "logoText": "CardMee",
    "description": "",
    "foregroundColor": "rgb(2,2,4)",
    "backgroundColor": "rgb(244,244,254)",
    "storeCard": {
        "headerFields": [
            {
                "key": "date",
                "label": "  ",
                "value": "¥888.66"
            }
        ],
        "secondaryFields": [
            {
                "key": "more",
                "label": "VIP  ",
                "value": "Cangyu Zheng"
            }
        ],
        "backFields": [
            {
                "key": "records",
                "label": "    (  10 )",
                "value": " 9/23 ¥107.00      
9/21 ¥58.00
8/25 ¥44.00
8/23 ¥107.00
8/18 ¥107.00
7/29 ¥58.00
7/26 ¥44.00
7/13 ¥58.00
7/11 ¥44.00
6/20 ¥44.00
"
}, { "key": "phone", "label": " ", "value": "4008-888-88" }, { "key": "terms", "label": " ", "value": "(1) , , ,1-2 , , 1 , , ;
(2) , , ( );
(3) : , , , ; , 11 17 2 / ( 1 ), , ;
(4) ,( , , ; , , , ), 16 , :1028**********; 6 , 6 , ( 10 ,1350755**** 4 ,1860755**** 6 );
(5) 2016 2 30 , "
}, { "key": "support", "label": " ", "value": "http://s.cardmee.net/camee/" } ]
}
, "labelColor": "rgb(87,88,93)" }

3、manifestを作成する.jsonファイル、「openssl sha 1[ファイルパス]」で、すべてのファイルのハッシュ値をそれぞれ算出することができます:4、signatureファイルを生成する:a.前にインポートしたPass Type証明書(Pass Type ID:pass.com.taokatao.mywallet)から個人情報交換(.p 12)ファイルをエクスポートし、パスワードを指定し(パスワードを123123と仮定)、「mywallet.p 12」として保存します(証明書の下にある専用鍵ではなく、証明書をエクスポートすることに注意してください).b.キーホルダーの中に「Apple Worldwide Developer Relations Certification Authority」証明書を見つけて、「AWDRCA.pem".c....p 12証明書を.pem証明書mywallet.pemに変換します(エクスポート時に設定したパスワード123123を入力する必要があります)、openssl pkcs 12-in mywallet.p 12-clcerts-nokeys-out mywallet.pem-passin pass:12323
d.従.p 12鍵ファイルをエクスポートするmywalletkey.pem(ここでパスワードを123123に設定)openssl pkcs 12-in mywallet.p 12-nocerts-out mywalletkey.pem-passin pass:12323-passout pass:12323
e.AWDRCAによる.pem、mywallet.pem、mywalletkey.pem、manifest.jsonはsignatureファイル(ヒント入力mywalletkey.pemの書き出し時に設定パスワード123123):openssl smime-binary-sign-certfile AWDRCAを生成する.pem -signer mywallet.pem -inkey mywalletkey.pem -in manifest.json -out signature -outform DER
5.icon.png、[email protected]、logo.png、[email protected]、strip.png、[email protected] 、pass.json、manifest.json、signatureはpassパッケージに圧縮されます(ここでは「mywallet.pkpass」と名付けられています).zip-r mywallet.pkpass manifest.json pass.json signature [email protected] icon.png [email protected] strip.png [email protected]
iOS側はPKPassファイルをどのようにロードしますか?
1、Xcodeは新しいプロジェクトを作成し、Bundle IdentifierにApp ID 2と名前を付け、ターゲットTargetを選択し、「Capabilities」タブをクリックし、Walletスイッチを開く.ここでチェックする必要があります:Allow all team pass types.しかし、あなたが見た下の「Add the wallet feature to your App ID」の前は赤いです.大丈夫これはあなたがまだApp IDを作成していないためで、下の3を見て、Apple開発者のウェブサイトに入って、新しいApp IDを作って、第一歩のApp IDと一致して、更にこの赤いヒントを見て消えてなくなって、正常なチェックの形式は4、目標のTargetに入って、Generalラベル、Xcodeに自動的に私たちのために証明書5を管理させて、上で作ったPKPassファイルをプロジェクトの中で6、エンコードして読み込み、表示します.so easy!
#import "ViewController.h"
#import 

@interface ViewController ()<PKAddPassesViewControllerDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    PKAddPassButton *pkAddBtn = [[PKAddPassButton alloc] initWithAddPassButtonStyle:PKAddPassButtonStyleBlack];
    pkAddBtn.titleLabel.font = [UIFont systemFontOfSize:12];
    pkAddBtn.frame = CGRectMake(100, 100, 220, 40);
    [self.view addSubview:pkAddBtn];


    [pkAddBtn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];

}

- (void)btnClick:(PKAddPassButton *)button {
    NSString *passPath=[[NSBundle mainBundle] pathForResource:@"mywallet" ofType:@"pkpass"];
    NSData *passData = [[NSData alloc] initWithContentsOfFile:passPath];
    NSError *error = nil;
    PKPass *pass = [[PKPass alloc] initWithData:passData error:&error];
    if (error) {
        NSLog(@"  Pass       ,    :%@",error.localizedDescription);
    };
    PKAddPassesViewController *vc = [[PKAddPassesViewController alloc] initWithPass:pass];
    vc.delegate = self;

    [self presentViewController:vc animated:true completion:nil];

}

-(void)addPassesViewControllerDidFinish:(PKAddPassesViewController *)controller{
    NSLog(@"add pass finished.");
    [self dismissViewControllerAnimated:true completion:nil];
}