iOS: Passbook

Cómo añadir Passbook en nuestras aplicaciones iOS

Ficheros necesarios
Necesitamos en una carpeta los siguientes ficheros:


icon.png icon@2x.png logo.png logo@2x.png manifest.json pass.json strip.png strip@2x.png

Los creamos:
Creamos un fichero llamado pass.json con la siguiente información
{
    «formatVersion» : 1,
    «passTypeIdentifier» : «pass.com.edreams.flights.testpassbook»,
    «serialNumber» : «001»,
    «teamIdentifier» : «4W47KRC7HR»,
    «organizationName» : «eDreams»,
    «description» : «Coupon for 1 Free Passenger»,
    «logoText» : «¡Viaja Gratis!»,
    «foregroundColor» : «rgb(255, 255, 255)»,
    «backgroundColor» : «rgb(135, 129, 189)»,
    «labelColor» : «rgb(45, 54, 129)»,
    «barcode» : {
        «message» : «All you need is love»,
        «format» : «PKBarcodeFormatPDF417»,
        «messageEncoding» : «iso-8859-1»
    }
    «coupon» : {
        «primaryFields» : [ {
                           «key» : «offer»,
                           «label» : «for you»,
                           «value» : «Free love»
                           }]
    }
}
Creamos un fichero llamado manifest.json con la siguiente información
{
  «strip.png»:«25b4c9ff2bafe056f3e28379db0ef3fb460c718b»,
  «strip@2x.png«:«dee775ed6fb3c7278b84c65853401e760caabc92»,
  «icon.png»:«8eaa0896db93f2165fa417df3d002ce9c61fcd92»,
  «icon@2x.png«:«555ce7f70f2f44fb7ac9d9f46df5738ec6250f37»,
  «logo.png»:«e8c4edfbcae41d9d88fad7137d8ed30ae5f73e67»,
  «logo@2x.png«:«1f9b1cc4c75b380ade07e9f2b7f37f988d9d14c3»,
  «pass.json»:«2a28092907dfbcb34c3f1559742824be4bef63b6»
}
Firma Digital
Hay que crear el sha1 que es lo que se incluye en la última línea, para ello usamos este comando
iMac:PassBook ricardo$ openssl sha1 pass.json
SHA1(pass.json)= 2a28092907dfbcb34c3f1559742824be4bef63b6
Creamos un certificado para passbook, lo instalamos en el Acceso a Llaveros y lo exportamos con el nombre Certificates.p12
Generamos el certificado passcertificate.pem usando el comando:
iMac:PassBook ricardo$ openssl pkcs12 -in Certificates.p12 -clcerts -nokeys -out passcertificate.pem -passin pass:YOURPASS
MAC verified OK
Contenido de la carpeta hasta este momento:
iMac:PassBook ricardo$ ls
Certificates.p12 icon@2x.png logo@2x.png pass.json strip.png
icon.png logo.png manifest.json passcertificate.pem strip@2x.png
Seguimos firmando
iMac:PassBook ricardo$ openssl pkcs12 -in Certificates.p12 -nocerts -out passkey.pem -passin pass:YOURPASS -passout pass:YOURPASS
MAC verified OK
Y por último
iMac:PassBook ricardo$ openssl smime -binary -sign -certfile WWDR.pem -signer passcertificate.pem -inkey passkey.pem -in manifest.json -out signature -outform DER -passin pass:YOURPASS
Ahora tendremos el archivo signature dentro de nuestra carpeta.
Comprimimos los siguientes archivos:
iMac:PassBook ricardo$ zip -r test.pkpass manifest.json pass.json signature logo.png logo@2x.png icon.png icon@2x.png strip.png strip@2x.png
Añadimos test.pkpass a nuestro proyecto
Source Code
Añadimos PassKit.framework
#import 
@interface ConfirmationViewController () <PKAddPassesViewControllerDelegate>
{
    NSMutableArray *_passes;
}
-(IBAction)viewPassBook:(id)sender{
    if (!_passes)
        _passes = [[NSMutableArray allocinit];   
    [self openPassWithName:@»test.pkpass»];
}
-(void)openPassWithName:(NSString*)name{
    NSString* passFile = [[[NSBundle mainBundleresourcePathstringByAppendingPathComponent: name]; 
    NSData *passData = [NSData dataWithContentsOfFile:passFile];
    NSError* error = nil;
    PKPass *newPass = [[PKPass allocinitWithData:passData  error:&error];
    if (error!=nil){
        [[[UIAlertView allocinitWithTitle:@»Passes error»
                                    message:[error  localizedDescription]
                                   delegate:nil
                          cancelButtonTitle:@»Ooops»
                          otherButtonTitlesnilshow];
        return;
    }    
    PKAddPassesViewController *addController = [[PKAddPassesViewController allocinitWithPass:newPass];
    addController.delegate = self;
    [self presentViewController:addController animated:YES completion:nil];
}
 //Método delegado cuando se baja el controller
-(void)addPassesViewControllerDidFinish: (PKAddPassesViewController*) controller{
    [self dismissViewControllerAnimated:YES completion:nil];
}

Leave a Comment

Copyright © 2019 Soulmedic Theme All Rights Reserved | Design Themes

Atomic Flavor