swift – 如何在INSendPaymentIntent(SiriKit)中搜索特定联系人
发布时间:2020-12-14 04:31:20 所属栏目:百科 来源:网络整理
导读:摘要 尝试编写INSendPaymentIntent代码,但无法区分共享相似名字的联系人. Siri似乎在INPersonResolutionResult.disambiguation(with:matchedContacts)后立即进入循环 守则背后的思考 我选择使用联系人的姓名来初始搜索联系人,因为如果用户仅指定名字,则使用
|
摘要
尝试编写INSendPaymentIntent代码,但无法区分共享相似名字的联系人. Siri似乎在INPersonResolutionResult.disambiguation(with:matchedContacts)后立即进入循环 守则背后的思考 不幸的是,使用给定的名称将Siri发送到循环中,要求用户一遍又一遍地指定联系人… 题 码 func resolvePayee(forSendPayment intent: INSendPaymentIntent,with completion: (INPersonResolutionResult) -> Void) {
if let payee = intent.payee {
var resolutionResult: INPersonResolutionResult?
var matchedContacts: [INPerson] = []
let predicate = CNContact.predicateForContacts(matchingName: (payee.nameComponents?.givenName)!)
do {
let searchContactsResult = try CNContactStore().unifiedContacts(matching: predicate,keysToFetch:[CNContactGivenNameKey,CNContactFamilyNameKey,CNContactMiddleNameKey,CNContactPhoneNumbersKey,CNContactImageDataKey,CNContactIdentifierKey])
for contact in searchContactsResult {
matchedContacts.append(createContact((contact.phoneNumbers.first?.value.stringValue)!,contact: contact))
}
} catch {
completion(INPersonResolutionResult.unsupported())
}
switch matchedContacts.count {
case 2 ... Int.max:
resolutionResult = INPersonResolutionResult.disambiguation(with: matchedContacts)
case 1:
let recipientMatched = matchedContacts[0]
print("Matched a recipient: (recipientMatched.displayName)")
resolutionResult = INPersonResolutionResult.success(with: recipientMatched)
case 0:
print("This is unsupported")
resolutionResult = INPersonResolutionResult.unsupported()
default:
break
}
completion(resolutionResult!)
} else {
completion(INPersonResolutionResult.needsValue())
}
}
解决方法
每当你退回时,Siri会要求确认这个人的姓名:
completion(INPersonResolutionResult.needsValue()) 或这个: completion(INPersonResolutionResult.disambiguation(with: matchedContacts)) 在这种情况下,我认为它更有可能进入循环,因为你一直返回第二个结果(INPersonResolutionResult.disambiguation).这意味着您在此行中的查询将返回2人或更多人: let searchContactsResult = try CNContactStore().unifiedContacts(matching: predicate,CNContactIdentifierKey]) 我建议你调试那行,看看你是否给过Siri这个值: INPersonResolutionResult.success (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
