Zenki Wu
Zenki Wu

Reputation: 63

How to get voip phone name description from native phone recents?

When I tab the outgoing call made by my app in native phone recents But I only can get the id (EX: 12345678), can't get the description (EX: David)

native phone recents

info of the outgoing call

Here is my code in 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;  
} 

I can't found any info about the description (EX: David) in INPerson object.

Is there any other way to get the phone description?

Upvotes: 0

Views: 1691

Answers (1)

Ri_
Ri_

Reputation: 662

I don't think you can do that.

When you configure your CXProvider object, you specify the supported handle types (CXHandle.HandleType), for example:

providerConfiguration.supportedHandleTypes = [.phoneNumber]

According to the CXHandle documentation:

When the telephony provider receives an incoming call or the user starts an outgoing call, the other caller is identified by a CXHandle object. For a caller identified by a phone number, the handle type is CXHandleTypePhoneNumber and the value is a sequence of digits. For a caller identified by an email address, the handle type is CXHandleTypeEmailAddress and the value is an email address. For a caller identified in any other way, the handle type is CXHandleTypeGeneric and the value typically follows some domain-specific format, such as a username, numeric ID, or URL.

You can add a generic CXHandle for an outbound call:

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

but it's not sure whether this info is passed into the userActivity that is passed into your app.

EDIT: As user102008 noted, you can take a look at Apple's Speakerbox example.

To resolve contacts, you can add this call to your intent handler

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

EDIT 2: I have a lot more to learn :( Here's a link with more information: CallKit find number used to start app from native phone app

Upvotes: 1

Related Questions