在代码中附加PKPass到电子邮件

时间:2013-01-27 04:53:57

标签: ios email nsdata passbook passslot

我正在使用PassSlot创建一个可以添加到存折的Pass。我试图将其下载到设备以允许附加到电子邮件。以下是我到目前为止的情况:

[PassSlot passFromTemplateWithName:@"LoveCouponCards" withValues:values pass:^(PSPass *pass) {
    [PassSlot downloadPass:pass pass:^(PSPass *pass) {
        PKPass *pkpass = [pass performSelector:@selector(pass)];
        NSLog(@"Pass: %@", pkpass);


        MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
        picker.mailComposeDelegate = self;


        NSArray *toRecipients = [NSArray arrayWithObject:@"friend@example.com"];


        [picker setToRecipients:toRecipients];


        [picker addAttachmentData:pkpass mimeType:@"application/vnd.apple.pkpass" fileName:@"HI"];

        // Fill out the email body text
        NSString *emailBody = \\
        [picker setMessageBody:emailBody isHTML:NO];

        [self presentViewController:picker animated:YES completion:nil];


    }];
}];

问题在于,在电子邮件的addAttachment部分,它会抛出NSData基本上无法与PKPass相关的错误。如何将传递转换为NSData以便我可以附加它?

更新:

我试过

 NSURL *url = pkpass.passURL;
 NSData *so = [NSData dataWithContentsOfURL:url];

然后把'so'作为addAttachment,但它没有附加任何电子邮件。

2 个答案:

答案 0 :(得分:3)

首先,passURL的{​​{1}}属性并不像您想象的那样有效。 不是传递本身的URL。它是一个URL,用于打开Passbook应用程序并加载请求的通行证。

您可以使用PKPass 创建 PKPass,但无法撤消该流程。听起来好像你试图通过设备,然后通过电子邮件发送它。这是不允许的 - 如果是的话,人们可以轻松地复制和分发传球(这不一定是好事)。

如果您想通过电子邮件向用户发送通行证,则需要使用服务器,而不是客户端。我担心使用NSData无法做到你想要做的事情。遗憾!

答案 1 :(得分:2)

不幸的是,PassKit库没有提供从PKPass获取NSData的方法。

我们已提供API call,可让您获取通行证的原始数据。 我们将使用一种方法扩展我们的PassSlot SDK,使您无需手动调用此API方法即可获取NSData。

<强>更新

新的SDK版本0.5现已发布。您可以使用以下代码附加通行证:

[PassSlot passFromTemplateWithName:@"LoveCouponCards" withValues:values pass:^(PSPass *pass) {
    [PassSlot downloadPass:pass pass:^(PSPass *pass) {

        MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
        picker.mailComposeDelegate = self;

        [picker setToRecipients:@[@"friend@example.com"]];
        [picker addAttachmentData:pass.data mimeType:@"application/vnd.apple.pkpass" fileName:@"LoveCouponCard.pkpass"];
        [picker setMessageBody:emailBody isHTML:NO];

        [self presentViewController:picker animated:YES completion:nil];
    }];
}];