Cordova Ionic PhoneGap SDK

SDK Installation


Package Installation

plugin add

cordova plugin add airbridge-cordova-sdk
ionic cordova plugin add airbridge-cordova-sdk
phonegap plugin add airbridge-cordova-sdk

require

When Ionic Project,
Please add following code into the .ts files which need to use Airbridge SDK.

import ...
...
declare let Airbridge: any;

...

Project Setup

Android

MainApplication.java

Add the following code to the function onCreate in android/app/src/main/java/.../MainApplication.java file.

package ...;

import android.app.Application;

import co.ab180.airbridge.cordova.AirbridgeCO;

public class MainApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        AirbridgeCO.init(this, "APP_NAME", "APP_TOKEN");
    }
}
package ...;

import android.app.Application

import co.ab180.airbridge.cordova.AirbridgeCO

class MainApplication: Application() {
    override fun onCreate() {
        super.onCreate()
        AirbridgeCO.init(this, "YOUR_APP_NAME", "YOUR_APP_TOKEN")
    }
}

APP_NAME can be found on the dashboard at Settings > Tokens > App Name.
APP_TOKEN can be found on the dashboard at Settings > Tokens > App SDK Token.

iOS

AppDelegate.m

Add the following code to the import section of the file ios/[Project Name]/AppDelegate.m.

#import "AirbridgeCO.h"
// Bridge Header

#import "AirbridgeCO.h"

Add the following code to the function application:idFinishLaunchingWithOptions: in ios/[Project Name]/AppDelegate.m file.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [AirbridgeCO getInstance:@"APP_TOKEN" appName:@"APP_NAME" withLaunchOptions:launchOptions];
    ...
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    AirbridgeCO.getInstance("YOUR_APP_TOKEN", appName:"YOUR_APP_NAME", withLaunchOptions:launchOptions)
    ...
}

APP_NAME can be found on the dashboard at Settings > Tokens > App Name.
APP_TOKEN can be found on the dashboard at Settings > Tokens > App SDK Token.

Settings

airbridge.json
  1. Add file airbridge.json file to project folder.
  2. Add settings in JSON format.
Exmaple
{
    "sessionTimeoutSeconds": 300,
    "autoStartTrackingEnabled": true,
    "userInfoHashEnabled": true,
    "trackAirbridgeLinkOnly": false,
    "facebookDeferredAppLinkEnabled": false,
    "locationCollectionEnabled": false,
    "trackingAuthorizeTimeoutSeconds": 0
}
Description
Name Type Default Description
sessionTimeoutSeconds number 300 When user re-opens the app within session period, app open event will not be sent as determined by same session.
autoStartTrackingEnabled boolean true When set to false, no events will be sent until Airbridge.state.startTracking() is called.
userInfoHashEnabled boolean true When set to false, user email and user phone information are sent without hash.
trackAirbridgeLinkOnly boolean false When set to true, Deeplink event is sent only when app is opened with Airbridge Deeplink.
facebookDeferredAppLinkEnabled boolean false When set to true and Facebook SDK is installed, collect Facebook Deferred AppLink.
locationCollectionEnabled boolean false When set to true, collects location information. (Android Only)

2 permission are required on AndroidManifest.xml
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_COARSE_LOCATION
trackingAuthorizeTimeoutSeconds number 0 When set timeout, Install event is delayed until `Request tracking authorization alert` is clicked. (iOS only)

Testing

Check install event is sent when install and run application.

Check with dashboard

Events from SDK are shown on Airbridge Dashboard > Raw Data > App Real-time Logs.

  1. Move to Airbridge Dashboard > Raw Data > App Real-time Logs.
  2. Insert iOS IDFA to Search.

Can be delayed by up to 5 minutes.

Deep Link Setup


Dashboard Setup

Android

2 informations is needed on Airbridge Dashboard > Tracking Link > Deep Link.

  • Android URI Scheme
  • Android sha256_cert_fingerprints
Android URI Scheme

Enter the desired scheme by attaching :// to the Android URI Scheme area of Airbridge dashboard.

Example) example://

Android sha256_cert_fingerprints
  1. Prepare the keystore that you used to register your app with the Google Play Store.
  2. Execute the following command.
keytool -list -v -keystore my-release-key.keystore
  1. Copy SHA256 of Certificate fingerprints and paste to Android sha256_cert_fingerprints area.

Example) 14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5

iOS

2 informations is needed on Airbridge Dashboard > Tracking Link > Deep Link.

  • iOS URI Scheme
  • iOS App ID

iOS URI Scheme

Enter the desired scheme by attaching :// to the iOS URI Scheme area of Airbridge dashboard.

Example) example://

iOS App ID

  1. Move to Identifiers of https://developer.apple.com/account/resources.
  2. Click identifier of application which want to track.
  3. Insert App ID Prefix + . + Bundle ID

Example) 9JA89QQLNQ.com.apple.wwdc

Project Setup

Javascript

setDeeplinkListener

Setup callback which is called when deeplink or deferred deeplink open application.

Airbridge.deeplink.setDeeplinkListener((deeplink) => {
    // Code to be executed when a `Deeplink` or `Deferred Deeplink` occurs
    // deeplink = YOUR_SCHEME://...

    console.log(deeplink);
});

deeplink from airbridge is sent to DeeplinkCallback with YOUR_SCHEME://... form.

Android

AndroidManifest.xml

In the MainActivity area of the file android/app/src/main/AndroidManifest.xml, insert the intent-filter as shown below.

<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW" />

    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />

    <data android:scheme="http" android:host="APP_NAME.deeplink.page" />
    <data android:scheme="https" android:host="APP_NAME.deeplink.page" />
</intent-filter>
<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW" />

    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />

    <data android:scheme="http" android:host="APP_NAME.airbridge.io" />
    <data android:scheme="https" android:host="APP_NAME.airbridge.io" />
</intent-filter>
<intent-filter>
    <action android:name="android.intent.action.VIEW" />

    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />

    <data android:scheme="SCHEME" />
</intent-filter>

Enter the app name to APP_NAME.
Enter the scheme value set in the dashboard to SCHEME.

MainActivity.java

Insert the following code in the file android/app/src/main/java/.../MainActivity.java.

@Override
protected void onResume() {
    super.onResume();

    AirbridgeCO.getDeeplink().fetch(getIntent());
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
}
override fun onResume() {
    super.onResume()
    AirbridgeCO.processDeeplinkData(intent)
}

override fun onNewIntent(intent: Intent) {
    super.onNewIntent(intent)
    setIntent(intent)
}

iOS

Scheme
  1. Xcode > Project file > Info > URL Types.
  2. Put scheme value set in the dashboard to identifier and URL Schemes.

Remove the :// and insert it.

Universal Link
  1. Xcode > Project File > Signing & Capabilities > Associated Domains.
  2. Click + button and add applinks:APP_NAME.airbridge.io.
  3. Click + button and add applinks:APP_NAME.deeplink.page.

'APP_NAME' can be found on the dashboard at 'App Setting > App Info'.

AppDelegate.m

Scheme
  1. Open ios/[Project Name]/AppDelegate.m file.
  2. Insert below code.
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey, id>*)options
{
    NSLog(@"openURL : %@", url);

    [AirbridgeCO.deeplink handleURLSchemeDeeplink:url];

    return YES;
}
func application(_ app: UIApplication,
                 open url: URL,
                 options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool
{
    NSLog(@"openURL : %@", url)

    AirbridgeRN.deeplink()?.handleURLSchemeDeeplink(url)
    
    return true
}
  1. If you are targeting iOS 8.x or earlier, insert the following additional code.
- (BOOL)application:(UIApplication*)application
            openURL:(NSURL*)url
  sourceApplication:(NSString*)sourceApplication 
         annotation:(id)annotation
{
    NSLog(@"openURL : %@", url);

    [AirbridgeCO.deeplink handleURLSchemeDeeplink:url];

    return YES;
}
func application(_ application: UIApplication,
                 open url: URL,
                 sourceApplication: String?,
                 annotation: Any) -> Bool
{
    NSLog(@"openURL : %@", url)

    AirbridgeRN.deeplink()?.handleURLSchemeDeeplink(url);
    
    return true;
}
Universal Link
  1. Open ios/[Project Name]/AppDelegate.m file.
  2. Insert below code.
-  (BOOL)application:(UIApplication*)application
continueUserActivity:(NSUserActivity*)userActivity
  restorationHandler:(void (^)(NSArray* _Nullable))restorationHandler
{
    NSLog(@"continueUserActivity : %@", userActivity.webpageURL);

    [AirbridgeCO.deeplink handleUniversalLink:userActivity.webpageURL];

    return YES;
}
func application(_ application: UIApplication,
                 continue userActivity: NSUserActivity,
                 restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool
{
    if let webpageURL = userActivity.webpageURL {
        NSLog("continueUserActivity : %@", webpageURL)
      
        AirbridgeRN.deeplink()?.handleUniversalLink(webpageURL)
    }
    
    return true
}

Testing

Check application is opened and deeplink event is sent when click deeplink that in YOUR_SCHEME://... form.

Example) example://

  1. Click deeplink.
  2. Check deeplink event is exist on Airbridge dashboard > Raw Data > App Real-time Logs

User Setup


User Identifier Setup

Insert user identifier to SDK, then SDK insert user identifier to all of tracked events.

이름

설명

제한

id

User ID

email

User Email

Automatically hashed by SHA256
(Can be disabled)

phone

User phone number

Automatically hashed by SHA256
(Can be disabled)

attributes

User attributes

  • Maximum 100
  • key is NSString type, maximum 128
  • key must satisfy ^[a-z_][a-z0-9_]*$ expression
  • value is NSString or NSNumber type
  • when value is NSString type, maximum 1024

alias

Another User ID

  • Maximum 100
  • key is NSString type, maximum 128
  • key must satisfy ^[a-z_][a-z0-9_]*$ expression
  • value is NSString type, maximum 1024

Example

Airbridge.state.setUser({
    ID: 'test1',
    email: '[email protected]',
});
Airbridge.state.setUser({
    email: '[email protected]',
    phone: '222-2222-2222',
});
Airbridge.state.updateUser({
    ID: 'test3',
});

Testing

After user setting, check event has user information when send event with SDK.

  1. Insert user identifier to SDK.
  2. Send event with SDK.
  3. Click the event on Airbridge dashboard > Raw Data > App Real-time Logs and check user information in JSON.

Event Setup


When important user actions occur, in-app events can be sent to measure performance by channel.

All parameters of event are optional.
However, adding more information to events help providing more accurate statistics.

Custom Event

Send custom event with SDK.

Airbridge.event.custom('Custom', {
    action: 'Action custom',
    label: 'Label custom',
    value: 9999,
    attributes: {
        custom: 'value custom',
    },
});

User Event

Send user event with SDK.

action, label, value, attributes are also can be used on user event.

Sign up

When send sign up event, user identifier are set by inserted value.

Airbridge.event.signUp({
    ID: 'test',
    email: '[email protected]',
    phone: '000-0000-0000',
});

Sign in

When send sign in event, user identifier are set by inserted value.

Airbridge.event.signIn({
    ID: 'test',
    email: '[email protected]',
    phone: '000-0000-0000',
});

Sign out

When send sign out event, user identifier are initialized.

Airbridge.event.signOut();

E-Commerce Event

Send ecommerce event with SDK.

action, label, value, attributes are also can be used on ecommerce event.

View home screen

Airbridge.event.viewHome();

View product detail

Airbridge.event.viewProductDetail({
    products: [
        {
            ID: '1',
            name: 'product A',
            price: 1000000,
            currency: 'KRW',
            position: 1,
            quantity: 1,
        },
    ],
});

View product list

Airbridge.event.viewProductList({
    listID: 'ID-1234567890',
    products: [
        {
            ID: '1',
            name: 'product A',
            price: 1000000,
            currency: 'KRW',
            position: 1,
            quantity: 1,
        },
        {
            ID: '2',
            name: 'product B',
            price: 1000000,
            currency: 'KRW',
            position: 2,
            quantity: 1,
        },
    ]
});

View search result

Airbridge.event.viewSearchResult({
    query: 'product A',
    products: [
        {
            ID: '1',
            name: 'product A',
            price: 1000000,
            currency: 'KRW',
            position: 1,
            quantity: 1,
        },
        {
            ID: '2',
            name: 'product B',
            price: 1000000,
            currency: 'KRW',
            position: 2,
            quantity: 1,
        },
    ],
});

Add to cart

Airbridge.event.addToCart({
    cartID: 'ID-1234567890',
    products: [
        {
            ID: '1',
            name: 'product A',
            price: 1000000,
            currency: 'KRW',
            position: 1,
            quantity: 1,
        },
        {
            ID: '2',
            name: 'product B',
            price: 1000000,
            currency: 'KRW',
            position: 2,
            quantity: 1,
        },
    ],
    currency: 'KRW',
    total: 50000,
});

Purchase

Airbridge.event.purchase({
    transactionID: 'transactionID-purchase',
    products: [
        {
            ID: '1',
            name: 'product A',
            price: 1000000,
            currency: 'KRW',
            position: 1,
            quantity: 1,
        },
        {
            ID: '2',
            name: 'product B',
            price: 1000000,
            currency: 'KRW',
            position: 2,
            quantity: 1,
        },
    ],
    isInAppPurchase: true,
    currency: 'KRW',
    total: 50000,
});

Testing

Check event is existed on airbridge dashboard when send event with SDK.

  1. Send event with SDK.
  2. Check event is existed on Airbridge dashboard > Raw Data > App Real-time Logs.

Advanced Setup


Session Timeout

Can setup with sessionTimeoutSeconds of airbridge.json.

Session timeout is in milliseconds and must be in 0 ~ 604800000 (7 days).
Default value of session timeout is 1000 * 60 * 5 (5 minutes).

Hash User Indentifier

Email and phone are automatically hashed by SHA256.
Can setup with userInfoHashEnabled
of airbridge.json.

Track Facebook Deferred Applinks

SDK can collect Facebook Deferred App Link with below setting.

  1. Install facebook SDK with https://developers.facebook.com/docs/ios/getting-started link.
  2. Set facebookDeferredAppLinkEnabled of airbridge.json to true.

When facebookDeferredAppLinkEnabled is true and Facebook SDK is installed, SDK collect Facebook Deferred App Link.

Track Airbridge Link Only

SDK always send deeplink event when application is opened with deeplink.

When trackAirbridgeLinkOnly of airbridge.json is true, SDK send deeplink event only when application is opened with deeplink from airbridge.

Opt-Out

When autoStartTrackingEnabled of airbridge.json is false, SDK do not send event to server until Airbridge.state.startTracking method is called.

Tracking Authorize Timeout (iOS only)

When show Request tracking authorization alert using AppTrackingTransparency.framework, even though Tracking authorize is clicked, IDFA is not collected on install event because install event is sent before click.

When set trackingAuthorizeTimeoutSeconds on airbridge.json, install event is delayed until Request tracking authorization alert is clicked.

Execute Tracking Link

Can perform tracking link on application.

Airbridge.placement.click('https://abr.ge/~~~', 'ablog://main', 'https://airbridge.io');
Airbridge.placement.impression('https://abr.ge/~~~');

click

click function +1 click statistic for the tracking link and moves to the set App, Web, or Fallback.
When the tracking link is clicked, call click function.

In click function, deeplink and fallback are backup links used when there is no Internet connection.
(All of these are optional parameters.)
Deeplink parameters are only available in Custom URL Scheme format.

Impression

impression function +1 impression statistic for the 'tracking link'.
When the tracking link is displayed on the UI, call impression function.

If you are using custom domain, you cannot use tracking link using custom short ID.
example: http://deeplink.ab180.co/custom -> Unavailable
example: http://deeplink.ab180.co/a3b1c2 -> Available
example: https://abr.ge/a3b1c2 -> Available

Braze Integration

Use SDK to SDK method to send Airbridge attribution information to Braze.

iOS

Modify ios/[Project name]/AppDelegate.m.

#import <AirBridge/AirBridge.h>
...

@interface AppDelegate () <ABTrackingDelegate>

@end

@implementation AppDelegate

...

- (void)airbridgeUserAttributed:(ABAttribution *)attribution {
    /* convert airbridge-attribution to braze-attribution */
    ABKAttributionData *abkAttributionData = [[ABKAttributionData alloc] initWithNetwork:attribution.source
                                                                                campaign:attribution.campaign
                                                                                 adGroup:attribution.adgroup
                                                                                creative:attribution.adcreative];


    /* add attribution-data to user */
    [[[Appboy sharedInstance] user] setAttributionData:abkAttributionData];

    [[[Appboy sharedInstance] user] setCustomAttributeWithKey:@"airbridge_medium"
                                               andStringValue:attribution.medium];
    [[[Appboy sharedInstance] user] setCustomAttributeWithKey:@"airbridge_ad_content"
                                               andStringValue:attribution.adcontent];
    [[[Appboy sharedInstance] user] setCustomAttributeWithKey:@"airbridge_search_keyword"
                                               andStringValue:attribution.searchKeyword];


    /* send event to Braze */
    [[Appboy sharedInstance] flushDataAndProcessRequestQueue];
}

...

@end

Android

Modify android/app/src/main/java/.../MainApplication.java.

import io.airbridge.AirBridge;
...

@Override
public void onCreate() {
    super.onCreate();

    ...
    /* Braze init */
    registerActivityLifecycleCallbacks(new AppboyLifecycleCallbackListener(...));
    ...

    /* Airbridge-Cordova-SDK init */
    AirbridgeCO.init(this, "APP_NAME", "APP_TOKEN");


    /* Braze integration with Airbridge-Android-SDK */
    AirBridge.turnOnIntegration(new AppBoyIntegrator());
}

The code related to Airbridge-Braze integration should be written below Braze init.

Migration


If you are updating the SDK from a previous version, please check below.

1.1.X => 1.2.X

Uninstall the old version of SDK.

cordova plugin remove airbridge-cordova-sdk
ionic cordova plugin remove airbridge-cordova-sdk
phonegap plugin remove airbridge-cordova-sdk

Install the new version of SDK.

cordova plugin add airbridge-cordova-sdk
ionic cordova plugin add airbridge-cordova-sdk
phonegap plugin add airbridge-cordova-sdk

Android

  1. Modify android/app/src/main/java/.../MainActivity
-     AirbridgeRN.getDeeplink().fetch(getIntent())
+     AirbridgeRN.processDeeplinkData(getIntent())

iOS

  1. Modify ios/[Project Name]/AppDelegate
-     AirbridgeRN.deeplink()?.handleURLSchemeDeeplink(url, withSourceBundle: sourceApplication)
+     AirbridgeRN.deeplink()?.handleURLSchemeDeeplink(url)

Setting

  1. Add file airbridge.json to project folder.

  2. Add settings in JSON format.

Exmaple
{
    "sessionTimeoutSeconds": 300,
    "autoStartTrackingEnabled": true,
    "userInfoHashEnabled": true,
    "trackAirbridgeLinkOnly": false,
    "facebookDeferredAppLinkEnabled": false,
    "locationCollectionEnabled": false
}
Description
Name Type Default Description
sessionTimeoutSeconds number 300 When user re-opens the app within session period, app open event will not be sent as determined by same session.
autoStartTrackingEnabled boolean true When set to false, no events will be sent until Airbridge.state.startTracking() is called.
userInfoHashEnabled boolean true When set to false, user email and user phone information are sent without hash.
trackAirbridgeLinkOnly boolean false When set to true, Deeplink event is sent only when app is opened with Airbridge Deeplink.
facebookDeferredAppLinkEnabled boolean false When set to true and Facebook SDK is installed, collect Facebook Deferred AppLink.
locationCollectionEnabled boolean false When set to true, collects location information. (Android Only)

2 permission are required on AndroidManifest.xml
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_COARSE_LOCATION

1.0.X -> 1.1.X

Install

Uninstall the old version of SDK.

cordova plugin remove airbridge-cordova-sdk
ionic cordova plugin remove airbridge-cordova-sdk
phonegap plugin remove airbridge-cordova-sdk

Install the new version of SDK.

cordova plugin add airbridge-cordova-sdk
ionic cordova plugin add airbridge-cordova-sdk
phonegap plugin add airbridge-cordova-sdk

Javascript

DeeplinkListener

Remove the getInitialDeeplink function and use the setDeeplinkListener function only.

- Airbridge.deeplink.getInitialDeeplink().then((deeplink) => {
-
- });
. 
. Airbridge.deeplink.setDeeplinkListner((deeplink) => {
. 
. });

Android

AndroidManifest.xml

In the MainActivity area of the file android/app/src/main/AndroidManifest.xml, insert the intent-filter as shown below.

+ <intent-filter android:autoVerify="true">
+     <action android:name="android.intent.action.VIEW" />
+
+     <category android:name="android.intent.category.DEFAULT" />
+     <category android:name="android.intent.category.BROWSABLE" />
+
+     <data android:scheme="http" android:host="YOUR_APP_NAME.deeplink.page" />
+     <data android:scheme="https" android:host="YOUR_APP_NAME.deeplink.page" />
+ </intent-filter>
. <intent-filter android:autoVerify="true">
.     <action android:name="android.intent.action.VIEW" />
. 
.     <category android:name="android.intent.category.DEFAULT" />
.     <category android:name="android.intent.category.BROWSABLE" />
. 
.     <data android:scheme="http" android:host="YOUR_APP_NAME.airbridge.io" />
.     <data android:scheme="https" android:host="YOUR_APP_NAME.airbridge.io" />
. </intent-filter>
. <intent-filter>
.     <action android:name="android.intent.action.VIEW" />
. 
.     <category android:name="android.intent.category.DEFAULT" />
.     <category android:name="android.intent.category.BROWSABLE" />
. 
.     <data android:scheme="EXAMPLE_SCHEME" />
. </intent-filter>
MainActivity.java

Modify android/app/src/main/java/.../MainActivity.java.

. import co.ab180.airbridge.cordova.AirbridgeCO;
. 
. public class MainActivity extends ReactActivity {
+     @Override
+     protected void onResume() {
+         super.onResume();
+ 
+         AirbridgeCO.getDeeplink().fetch(getIntent());
+     }
+  
.     @Override
.     public void onNewIntent(Intent intent) {
.         super.onNewIntent(intent);
.         setIntent(intent);
.     }
. }

iOS

Xcode

Universal Link

  1. Xcode > Project File > Signing & Capabilities > Associated Domains.
  2. Click + button and add applinks:YOUR_APP_NAME.deeplink.page.

'YOUR_APP_NAME' can be found on the dashboard at 'App Setting > App Info'.

AppDelegate.m

Modify ios/.../AppDelegate.m.

. - (BOOL)application:(UIApplication *)application
.             openURL:(NSURL *)url
.             options:(NSDictionary<UIApplicationOpenURLOptionsKey, id>*)options
. {
-     [AirbridgeCO.instance handleURLSchemeDeeplink:url
-                                withSourceBundle:options[UIApplicationOpenURLOptionsSourceApplicationKey]];
+     [AirbridgeCO.deeplink handleURLSchemeDeeplink:url
+                                withSourceBundle:options[UIApplicationOpenURLOptionsSourceApplicationKey]];
. 
.     return YES;
. }
. 
. - (BOOL)application:(UIApplication*)application
.             openURL:(NSURL*)url
.   sourceApplication:(NSString*)sourceApplication 
.          annotation:(id)annotation
. {
-     [AirbridgeCO.instance handleURLSchemeDeeplink:url
-                                withSourceBundle:sourceApplication];
+     [AirbridgeCO.deeplink handleURLSchemeDeeplink:url
+                                withSourceBundle:sourceApplication];
. 
.     return YES;
. }

If you are targeting iOS 8.x or earlier, modify the following additional code.

. -  (BOOL)application:(UIApplication*)application
. continueUserActivity:(NSUserActivity*)userActivity
.   restorationHandler:(void (^)(NSArray* _Nullable))restorationHandler
. {
-     [AirbridgeCO.instance handleUniversalDeeplink:userActivity.webpageURL];
+     [AirbridgeCO.deeplink handleUniversalLink:userActivity.webpageURL];
. 
.     return YES;
. }