我尝试在Apple passkit相关项目中使用PushSharp.
我目前的问题是关于passkit推送.
当我尝试创建我的通知时,它说
device tokent length无效(确切的异常消息:无效的DeviceToken长度.
var notif = new ApnsNotification(token, payload);
Run Code Online (Sandbox Code Playgroud)
当我注册一个新的passkit优惠券时,它的令牌长度是32.对我来说似乎没问题.
应该是什么问题?PushSharp是否支持passkit?正如我所见,有些人使用它,但我找不到任何关于它的官方信息.
请注意,我知道PushSharp使用它发送普通推送消息,它已经工作多年没有任何问题.我的问题是与passkit相关的推动.
非常感谢!
编辑
在Baris Akar的建议改变代码之后,问题得到解决,但另一个问题出现了:
Apple Notification Failed: ID=1, Code=ConnectionError
2016-11-18 11:07:22.de.[INFO]停止:等待任务2016-11-18 11:07:22.de.[INFO]等待所有任务1 2016-11-18 11:07:22.de.[INFO] APNS-Client [1]:发送批次ID = 1,Count = 1 2016-11-18 11:07:22.de.[INFO] APNS-Client [1]:已发送批处理,等待可能的响应... Apple Notification Failed:ID = 1,Code = ConnectionError 2016-11-18 11:07:22.de.[INFO]所有任务完成2016-11-18 11:07:22.de.[INFO]通过时所有2016-11-18 11:07:22.de.[INFO] Broker IsCompleted 2016-11-18 11:07:22.de.[DEBUG]经纪人任务结束2016-11-18 11:07:22.de.[INFO]停止:完成等待任务2016-11-18 11:07:22.de.[INFO] APNS-Client [1]:批量读取= 1,重置批量计时器...
我已经完成了ApplePay的全面工作。都可以在iOS10、11和12上正常运行。
从iOS 13和Xcode 11的第一个测试版开始至今(iOS13GM和Xcode 11GM),ApplePay授权模式不会出现。
我PKPaymentRequest应该没问题,因为它可以在以前的OS版本上运行,并且当我尝试演示时,PKPaymentAuthorizationViewController可以在控制台中找到它:
[General] Connection to remote alert view service failed
Run Code Online (Sandbox Code Playgroud)
我查看了其他问题,并尝试关闭并重新打开ApplePay功能几次,然后进行硬清理,重新启动。我什至用新的商家ID和证书创建了一个新应用,仍然得到了相同的结果-在iOS 12上可以运行,而在iOS 13GM上则不能。
更新:
使用在iOS 12.2模拟器上运行的Xcode 11GM,一切都可以正常工作。iOS 13GM模拟器上的相同代码不起作用。
这是我第一次在一个大项目中使用 PassKit 和 SwiftUI。我正在尝试实现 Apple Pay SwiftUI,并且由于还没有本地方式来实现,因此我尝试将 PKPaymentAuthorizationViewController 包装在 UIViewControllerRepresentable 中,但我不确定我是否正确执行此操作。
该视图显示正确,并且在单击它付款时似乎可以正常工作。我通过将视图绑定到 isPresentingApplePay bool 来控制显示窗口(见下文)。应该关闭窗口时会发生问题。点击cancel按钮不会关闭视图;有时它甚至不调用 paymentAuthorizationViewControllerDidFinish 委托函数。提交付款后也会发生同样的事情。有时会调用 didFinish 委托,但不会取消视图。我尝试传递绑定变量 isPresentingApplePay 并将其从 didFinish设置为false但它没有做任何事情。让视图消失的唯一方法是点击苹果支付窗口外的任何部分。
有谁知道我做错了什么?有什么我完全想念的吗?
通过将视图绑定到 if statement
这是我的 PKPaymentAuthorizationViewController 包装器:
import Foundation
import PassKit
import SwiftUI
struct ApplePayController: UIViewControllerRepresentable {
@Environment(\.presentationMode) var presentationMode
@EnvironmentObject var userData: UserData
@Binding var purchase: Purchase
@Binding var isPresenting: Bool
let items: [PKPaymentSummaryItem]
func updateUIViewController(_ uiViewController: PKPaymentAuthorizationViewController, context: Context) {
}
typealias UIViewControllerType = PKPaymentAuthorizationViewController
func makeUIViewController(context: Context) …Run Code Online (Sandbox Code Playgroud) 根据Apple的文档,在Swift中初始化PKPass需要两个元素,Pass数据和错误指针.
init(data data: NSData,
error error: NSErrorPointer)
Run Code Online (Sandbox Code Playgroud)
根据Apple的Swift文档,错误处理段落,
在Cocoa中,产生错误的方法将NSError指针参数作为其最后一个参数,如果发生错误,该参数将使用NSError对象填充其参数.Swift会自动将产生错误的Objective-C方法转换为根据Swift的本机错误处理功能引发错误的方法.
但有一个说明:
消耗错误的方法(例如使用NSError对象参数获取完成处理程序的委托方法或方法)不会成为Swift导入时抛出的方法.
由于该方法似乎并不消耗,而是在需要时使用指针设置错误,这似乎违背了Apple对错误处理的解释.我期待更多的代码:
do {
let modifiedPass : PKPass = try PKPass(data: data)
} catch let errorCaught as NSError
{
print("Error: \(errorCaught.domain)")
}
Run Code Online (Sandbox Code Playgroud)
我可悲的误解是什么,或者可能是什么原因造成这种明显的不匹配?
我们最近在应用商店推出了iOS应用.一些代码文件引用了Passkit框架.此外,还添加了权利
com.apple.developer.pass-type-identifiers
Run Code Online (Sandbox Code Playgroud)
关键和各自的团队ID.但在内部应用程序功能中,我们已禁用Wallet.但仍然在应用程序商店的应用程序描述中支持它显示钱包.有人遇到过同样的问题吗?有没有人知道它为什么显示?是因为我们添加的权利还是因为引用Passkit.
我正在使用此API将多个分组的传递添加到Apple Wallet.我意识到钱包中添加的传递不遵循我给它给这个API的数组[PKPass]的顺序.
public func addPasses(passes: [PKPass], withCompletionHandler completion: ((PKPassLibraryAddPassesStatus) -> Void)?)
Run Code Online (Sandbox Code Playgroud)
这里要注意的有趣的事情是,当我View All在添加通行证之前点击它确实按顺序显示所有通行证但是在点击Add All之后然后启动钱包应用程序以查看添加的顺序通过它不再相同.
任何线索为什么会发生这种情况以及如何维持秩序?
iOS 11下的我的应用程序正在记录:
Access to PassKit Shared Cache file denied. Please verify sandbox exceptions and/or file a Radar.
Run Code Online (Sandbox Code Playgroud)
之前没见过.有没有人知道这是从哪里来的?
(我的应用程序使用低级别的钥匙串方法而不是PassKit.但HockeyApp似乎.)
我无法将我的iOS应用程序从一个开发人员帐户转移到另一个开发人员帐户,因为它包含引用PassKit.framework.如果我删除,是否可以转移应用程序PassKit.framework.
我的应用不包含任何类型的电子钱包权利.
我已经使用 Passkit 框架在我的 iOS 应用程序中实现了 Apple Pay。我做了所有 这些事情来设置 Apple Pay。我正在使用沙箱帐户。我在钱包应用程序中添加了卡片,这些卡片是我从这个链接复制的测试卡片。我正在使用的这段代码:
print("\(((self.grandTotalLabel.text!).replacingOccurrences(of: "$", with: "")))")
let paymentNetworks = [PKPaymentNetwork.amex]
if PKPaymentAuthorizationViewController.canMakePayments(usingNetworks: paymentNetworks){
paymentRequest.supportedNetworks = paymentNetworks
paymentRequest.merchantCapabilities = .capability3DS
paymentRequest.requiredShippingAddressFields = [.all]
paymentRequest.paymentSummaryItems = self.itemToSell(shipping: 10.0)
let sameDayShipping = PKShippingMethod(label: "Same day divilery", amount: 12.99)
sameDayShipping.detail = "Same day divilery Detail"
sameDayShipping.identifier = "sameDay"
let twDaysShipping = PKShippingMethod(label: "Two days divilery", amount: 4.99)
twDaysShipping.detail = "Two days divilery Detail"
twDaysShipping.identifier = "twoDays"
let freeShipping = …Run Code Online (Sandbox Code Playgroud) 我们想向用户发送iPhone电子钱包卡,其中包含他们随时需要携带的重要健康信息。
出于隐私方面的考虑,我们只想使用Web表单,让用户输入必填字段,包括其姓名和生日等,生成通行证,然后丢弃用户信息,以保护其隐私。
然而,我们也想更新的pkpass文件(或内吧,pass.json在未来,如果信息发生变化的一些点文件)。似乎无法进行部分更新(!)?
您将如何解决?
根据@PassKit的回答,我想验证是否可以通过在请求中包括以下完整的 JSON文件来更新“优惠券”卡背面的某些文本:
{
"coupon": {
"backFields": [
{
"key": "info",
"label": "Important Information",
"value": "THIS INFORMATION CHANGED."
}
]
}
}
Run Code Online (Sandbox Code Playgroud)