我正在使用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,但它没有附加任何电子邮件。
答案 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];
}];
}];