0

当我在本地电话最近使用我的应用程序发出的拨出电话时,但我只能获取 id (EX: 12345678),无法获取描述 (EX: David)

本机电话最近

拨出电话信息

这是我在AppDelegate.m中的代码

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray * __nullable restorableObjects))restorationHandler NS_AVAILABLE_IOS(8_0)
{
     INInteraction *interaction = userActivity.interaction;  
     INStartAudioCallIntent *startAudioCallIntent = (INStartAudioCallIntent *)interaction.intent;  
     INPerson *contact = startAudioCallIntent.contacts[0];  
     INPersonHandle *personHandle = contact.personHandle;  
     NSString *phoneNumber = personHandle.value;  
} 

我在 INPerson 对象中找不到有关描述(例如:David)的任何信息。

有没有其他方法可以获取电话描述?

4

1 回答 1

1

我不认为你能做到这一点。

当您配置您的 CXProvider 对象时,您指定支持的句柄类型 (CXHandle.HandleType),例如:

providerConfiguration.supportedHandleTypes = [.phoneNumber]

根据CXHandle 文档

当电话服务提供商接收到呼入电话或用户启动呼出电话时,另一个呼叫者由 CXHandle 对象标识。对于由电话号码标识的呼叫者,句柄类型为 CXHandleTypePhoneNumber,值是数字序列。对于由电子邮件地址标识的呼叫者,句柄类型为 CXHandleTypeEmailAddress,值为电子邮件地址。对于以任何其他方式标识的调用者,句柄类型为 CXHandleTypeGeneric,并且该值通常遵循某些特定于域的格式,例如用户名、数字 ID 或 URL。

您可以为出站呼叫添加通用 CXHandle:

 - (instancetype)initWithType:(CXHandleType)type 
                        value:(NSString *)value;

但不确定此信息是否传递到userActivity传递到您的应用程序中。

编辑:正如 user102008 所说,您可以查看Apple 的 Speakerbox 示例

要解析联系人,您可以将此调用添加到您的意图处理程序

func resolveContacts(forStartAudioCall intent: INStartAudioCallIntent, with completion: @escaping ([INPersonResolutionResult]) -> Void) {
    // Your code here
}

编辑2:我还有很多东西要学:(这是一个包含更多信息的链接: CallKit find number used to start app from native phone app

于 2016-11-21T13:08:36.877 回答