Swift

1. Import the TruecallerSDK framework in the class where you want to initialize it (for example AppDelegate) and in the class that you want to receive the profile response. Usually, this will be the ViewController responsible for displaying the True Profile info.

Swift 2.3 :

import TrueSDK

Swift 3+ :

import TrueSDK

2. Check if the current device supports the use of TruecallerSDK and (if so) setup TruecallerSDK. We recommend this to be done in the application:didFinishLaunchingWithOptions:

Swift 2.3 :

//Setup TruecallerSDK
if TCTrueSDK.sharedManager().isSupported() {
TCTrueSDK.sharedManager().setupWithAppKey(<#YOUR_APP_KEY#>, appLink: <#YOUR_APP_LINK#>)
}

Swift 3+ :

//Setup TruecallerSDK
if TCTrueSDK.sharedManager().isSupported() {
TCTrueSDK.sharedManager().setup(withAppKey: <#YOUR_APP_KEY#>, appLink: <#YOUR_APP_LINK#>)
}

Use the entire associated domain link provided by Truecaller for YOUR_APP_LINK. For example: https://si44524554ef8e45b5aa83ced4e96d5xxx.truecallerdevs.com (including https://).

Important: Make sure you type the YOUR_APP_KEY and YOUR_APP_LINK fields correctly. If you mistype the YOUR_APP_LINK field, the permission screen in Truecaller will be shown and immediatelly dismissed. In this case, the SDK will not be able to send a corresponding error back to your app.

3. In AppDelegate implement the method application(application: continue userActivity: restorationHandler:) -> Bool and call the corresponding method of TCTrueSDK.sharedManager(). If the method returns false that means the activity need not be addressed by TruecallerSDK and you can handle it as desired.

Swift 2.3 :

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {
return TCTrueSDK.sharedManager().application(application, continueUserActivity: userActivity, restorationHandler: restorationHandler)
}

Swift 3+ :

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Swift.Void) -> Bool {
return TCTrueSDK.sharedManager().application(application, continue: userActivity, restorationHandler: restorationHandler)
}

Swift 5 :

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
return TCTrueSDK.sharedManager().application(application, continue: userActivity, restorationHandler: restorationHandler as? ([Any]?) -> Void)
}

For apps using SceneDelegate instead of AppDelegate :

func scene(_ scene: UIScene,
continue userActivity: NSUserActivity) {
TCTrueSDK.sharedManager().scene(scene, continue: userActivity)
}

4. Set the class where you want to receive TruecallerSDK events (the profile or errors) a TCTrueSDKDelegate

Swift 2.3 :

class HostViewController: UIViewController, TCTrueSDKDelegate {

Swift 3+ :

class HostViewController: UIViewController, TCTrueSDKDelegate {

5. Implement the two TCTrueSDKDelegate methods

Swift 2.3 :

func didFailToReceiveTrueProfileWithError(error: TCError) {
//Custom code here
}
func didReceiveTrueProfile(profile: TCTrueProfile) {
//Custom code here
}

Swift 3+ :

func didFailToReceiveTrueProfileWithError(_ error: TCError) {
//Custom code here
}
func didReceive(_ profile: TCTrueProfile) {
//Custom code here
}

The profile object is of type TCTrueProfile (written in Objective C) which offers the following user data:

typedef NS_ENUM(NSUInteger, TCTrueSDKGender) {
TCTrueSDKGenderNotSpecified = 0, //
TCTrueSDKGenderMale, //
TCTrueSDKGenderFemale, //
};
/*!
* @class TCTrueProfile
* @brief The True Profile info returned.
*/
@interface TCTrueProfile : NSObject <NSCoding>
/*! @property firstName @brief User's first name */
@property (nonatomic, strong, nullable, readonly) NSString *firstName;
/*! @property lastName @brief User's last name */
@property (nonatomic, strong, nullable, readonly) NSString *lastName;
/*! @property phoneNumber @brief User's phone number */
@property (nonatomic, strong, nullable, readonly) NSString *phoneNumber;
/*! @property countryCode @brief User's country code */
@property (nonatomic, strong, nullable, readonly) NSString *countryCode;
/*! @property street @brief User's street address */
@property (nonatomic, strong, nullable, readonly) NSString *street;
/*! @property city @brief User's city */
@property (nonatomic, strong, nullable, readonly) NSString *city;
/*! @property zipCode @brief User's zip code */
@property (nonatomic, strong, nullable, readonly) NSString *zipCode;
/*! @property facebookID @brief User's facebook id */
@property (nonatomic, strong, nullable, readonly) NSString *facebookID;
/*! @property twitterID @brief User's twitter id */
@property (nonatomic, strong, nullable, readonly) NSString *twitterID;
/*! @property email @brief User's email */
@property (nonatomic, strong, nullable, readonly) NSString *email;
/*! @property url @brief User's Truecaller profile url */
@property (nonatomic, strong, nullable, readonly) NSString *url;
/*! @property avatarURL @brief User's avatar url */
@property (nonatomic, strong, nullable, readonly) NSString *avatarURL;
/*! @property jobTitle @brief User's job title */
@property (nonatomic, strong, nullable, readonly) NSString *jobTitle;
/*! @property companyName @brief User's company name */
@property (nonatomic, strong, nullable, readonly) NSString *companyName;
/*! @property gender @brief User's gender */
@property (nonatomic, assign, readonly) TCTrueSDKGender gender;
/*! @property isVerified @brief User's account special verification status */
@property (nonatomic, assign, readonly) BOOL isVerified;
/*! @property isAmbassador @brief Is the user a Truecaller ambasador */
@property (nonatomic, assign, readonly) BOOL isAmbassador;

6. Set the delegate property of the TCTrueSDK.sharedManager(). Make sure you do this before you request the True Profile.

Swift 2.3 :

TCTrueSDK.sharedManager().delegate = self

Swift 3+ :

TCTrueSDK.sharedManager().delegate = self

7. Requesting the True Profile data can be done automatically or manually (either in code or in the Interface Builder):

a. The TCProfileRequestButton does the True Profile Request automatically. To use the predefined buttons you need to set the Button Type to Custom and set auto-layout constraints for the button. You can then choose the True button style and corners style of the button in code or in Interface Builder using TCProfileRequestButton property buttonStyle and buttonCornersStyle:

Swift 2.3 :

self.button.buttonStyle = TCButtonStyleBlue
self.button.buttonCornersStyle = TCButtonCornersStyleRounded

Swift 3+ :

self.button.buttonStyle = TCButtonStyle.blue.rawValue
self.button.buttonCornersStyle = TCButtonCornersStyle.rounded.rawValue

b. If you prefer to do it yourself, you can use the method requestTrueProfile.

Swift 2.3 :

TCTrueSDK.sharedManager().requestTrueProfile()

Swift 3+ :

TCTrueSDK.sharedManager().requestTrueProfile()

Important: Do not use both approaches a. and b. at the same time. Doing so will request the Truecaller profile 2 times in a row. You do not need to call requestTrueProfile if you use TCProfileRequestButton. This button includes the request in itself.