Обсуждение

We use cookies. Read the Privacy and Cookie Policy

Обсуждение

Для чтения этого раздела необходимо внимательно проработать раздел 19.8 и подготовить в Xcode проект для iOS, обладающий корректным профилем инициализации. Это нужно для доступа к вашим талонам, расположенным в пользовательской библиотеке Passbook.

Apple предоставила для iOS-разработчиков фреймворк PassKit.framework. Этот фреймворк позволяет взаимодействовать с талонами, которые пользователь установил на своем устройстве (устройствах). Чтобы можно было использовать этот фреймворк с применением новейшего компилятора LLVM, вам всего лишь потребуется импортировать в проект соответствующий обобщающий заголовок, вот так:

#import «AppDelegate.h»

#import <PassKit/PassKit.h>

<# Остаток вашего кода находится здесь #>

Далее потребуется объявить закрытое свойство типа PKPassLibrary в файле реализации делегата нашего приложения. Вышеупомянутый класс из фреймворка PassKit.framework позволяет взаимодействовать с талонами, добавленными на устройство. Для считывания значений, таких как номер платформы, с которой отправляется поезд, и город отправления, вам также нужно знать ключи из файла pass.json, который вы создали в разделе 19.2. Итак, объявим и эти ключи, тоже в файле реализации делегата приложения:

#import «AppDelegate.h»

#import <PassKit/PassKit.h>

@interface AppDelegate ()

@property (nonatomic, strong) PKPassLibrary *passLibrary;

@end

NSString *PassIdentifier = @"pass.pixolity.testingpasskit";

NSString *PassSerialNumber = @"p69f2J";

NSString *DepartureKey = @"departure";

NSString *DeparturePlatformKey = @"departurePlatform";

NSString *Arrival = @"arrival";

NSString *ArrivalPlatform = @"arrivalPlatform";

@implementation AppDelegate

<# Остаток вашего кода находится здесь #>

Великолепно! Написав этот код, вы теоретически получаете возможность доступа к библиотеке Passbook, расположенной на устройстве. Но погодите: а что делать, если на устройстве не установлена эта библиотека? Сначала нужно проверить, имеется ли библиотека Passbook на устройстве. Для этого используется метод класса isPassLibraryAvailable, относящийся к классу PKPassLibrary.

Далее нужно инстанцировать свойство passLibrary типа PKPassLibrary, а потом воспользоваться относящимся к библиотеке талонов методом экземпляра passWithPassTypeIdentifier: serialNumber:, чтобы найти искомый талон. Вот теперь понятно, почему среди различных ключей, относящихся к талону, мы, в частности, определяли идентификатор талона и его серийный номер. Вышеупомянутый метод вернет объект типа PKPass, который будет соответствовать вашему талону. Имея объект талона, вы можете считывать значения его ключей различными способами.

Ключи, задаваемые по умолчанию, в частности название организации и серийный номер, отображаются на свойства. Apple делает это за вас в классе PKPass. Однако если вы хотите получить доступ к значениям внутри primaryFields или в других подобных местах, то потребуется воспользоваться методом экземпляра localizedValueForFieldKey:, относящимся к классу PKPass. Мы сообщаем этому методу наши ключи, чтобы получить значения, ассоциированные с этими ключами. Далее показан небольшой фрагмент кода, позволяющий узнать информацию из талона, созданного в разделе 19.2: начальную и конечную точки маршрута, а также соответствующие железнодорожные платформы.

Код взят из файла реализации делегата нашего приложения.

#import «AppDelegate.h»

#import <PassKit/PassKit.h>

@interface AppDelegate ()

@property (nonatomic, strong) PKPassLibrary *passLibrary;

@end

NSString *PassIdentifier = @"pass.pixolity.testingpasskit";

NSString *PassSerialNumber = @"p69f2J";

NSString *DepartureKey = @"departure";

NSString *DeparturePlatformKey = @"departurePlatform";

NSString *Arrival = @"arrival";

NSString *ArrivalPlatform = @"arrivalPlatform";

@implementation AppDelegate

— (void) displayPassInformation:(PKPass *)paramPass{

if (paramPass == nil){

NSLog(@"The given pass is nil.");

return;

}

NSLog(@"Departs From = %@",

[paramPass localizedValueForFieldKey: DepartureKey]);

NSLog(@"Departure Platform = %@",

[paramPass localizedValueForFieldKey: DeparturePlatformKey]);

NSLog(@"Arrives at = %@",

[paramPass localizedValueForFieldKey: Arrival]);

NSLog(@"Arrival Platform = %@",

[paramPass localizedValueForFieldKey: ArrivalPlatform]);

}

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

if ([PKPassLibrary isPassLibraryAvailable]){

self.passLibrary = [[PKPassLibrary alloc] init];

PKPass *pass =

[self.passLibrary passWithPassTypeIdentifier: PassIdentifier

serialNumber: PassSerialNumber];

[self displayPassInformation: pass];

} else {

/* Здесь можно выполнить еще какое-нибудь действие */

NSLog(@"The pass library is not available.");

}

self.window = [[UIWindow alloc]

initWithFrame: [[UIScreen mainScreen] bounds]];

// Точка переопределения для дополнительной настройки после запуска

приложения

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

Идентификатор талона и серийный номер, указанные здесь, соответствуют талону, который я создал с помощью моего сертификата. Ваш серийный номер может быть таким же, но идентификатор талона определенно будет другим. Он должен быть информативен для вашей компании/на вашем портале инициализации.

Данный текст является ознакомительным фрагментом.