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];
}
iOS: Passbook iOS: Passbook Reviewed by Ricardo Castellanos on 17:41 Rating: 5

No hay comentarios:

Con la tecnología de Blogger.