Passbook: получить строку base64 с сервера, преобразовать и сохранить pkpass в iOS

#import <PassKit/PassKit.h>

// convert base64 string to pkpass data
NSData *passData = [[NSData alloc] initWithBase64EncodedString:strEncodeData options:0];
NSLog(passData);
// init a pass object with the data
PKPass *pass = [[PKPass alloc] initWithData:passData];
NSLog(pass);

//init a pass library
PKPassLibrary *passLib = [[PKPassLibrary alloc] init];

//check if pass library contains this pass already
if([passLib containsPass:pass]) {
    //pass already exists in library, show an error message
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Pass Exists" message:@"The pass you are trying to add to Passbook is already present." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alertView show];

} else {
    //present view controller to add the pass to the library
    PKAddPassesViewController *vc = [[PKAddPassesViewController alloc] initWithPass:pass];
    [vc setDelegate:(id)self];
    [self presentViewController:vc animated:YES completion:nil];
}

Я пытаюсь сохранить сберкнижку в кошельке ios. Мне нужно использовать данные base64 вместо uri из-за проблем с безопасностью. Поток, который я предположил для этого, подобен ниже

  1. получить строку base64 с сервера.
  2. преобразовать base64 в данные pkpass с помощью «initWithBase64EncodedString»
  3. сохранить pkpass в кошелек с помощью «PKAddPassesViewController»

С приведенным выше кодом прогресс останавливается на втором шаге с нулевой ошибкой, даже декодированная строка base64 верна. Поэтому я не могу быть уверен, что код после 2-го шага будет работать без ошибок.

заранее спасибо за ответ.


person epicsaga    schedule 30.10.2015    source источник
comment
Я сослался на эти ссылки: stackoverflow. com/questions/16817346/ и captechconsulting.com/blogs/   -  person epicsaga    schedule 30.10.2015
comment
Подтвердили ли вы, что пароль, содержащийся в строке base64, действителен и может быть добавлен в Passbook через файл pkpass или URL-адрес?   -  person Tomas McGuinness    schedule 31.10.2015
comment
Я просто поместил строку base64, сгенерированную вручную с помощью онлайн-инструмента (формат UTF-8). Могу ли я проверить правильность строки в xcode (object-c)?   -  person epicsaga    schedule 01.11.2015


Ответы (1)


Я знаю, что уже поздно, но я столкнулся с той же проблемой после большого количества исследований. Проблема связана с initWithBase64EncodedString:passBase64, когда строка base64 декодируется из ответа сервера с типом mime, например: data:application/vnd.apple.pkpass;base6 NSData get nil. Возможно, это ошибка, но если вы используете NSData+Base64 классы из https://github.com/l4u/NSData-Base64 он старый, но вы можете настроить его для работы с ARC, а затем преобразовать данные из строки base64 в NSData. Проблема исчезнет.

person Muhammad Anum    schedule 08.01.2021