• Developer Guide
  • SDK Integration

iOS SDK

DeepLink设置

Dashboard设置

需要在Airbridge Dashboard > Tracking Link > Deep Link中设置以下两种信息。

  • iOS URI Scheme

  • iOS App ID

iOS URI Scheme

请在iOS URL Scheme输入框中输入包含://的URL Scheme,如下所示。

例如) example://

Attention

Airbridge的URI Scheme仅支持英文小写字母、数字以及部分特殊字符 (-+.)。

iOS App ID

  1. 请访问 https://developer.apple.com/account/resources 并转到 Identifiers

  2. 点击要跟踪的应用的 Identifier

  3. 将该 IdentifierApp ID Prefix+.+ Bundle ID输入到 Airbridge Dashboard iOS App ID输入框中。

例如) 9JA89QQLNQ.com.apple.wwdc

Project 设置

Scheme

  1. 请转到 Xcode > Project 文件> Info> URL Types

  2. 请在 URL Schemes中输入在 Airbridge Dashboard中输入过的 iOS URI Scheme

    Attention

    请删除 :// 后输入。

  1. 请转到 Xcode> Project 文件> Signing & Capabilities

  2. 点击 + Capability,并添加 Associated Domains

  3. Associated Domains中添加 applinks:YOUR_APP_NAME.airbridge.io

  4. Associated Domains中添加 applinks:YOUR_APP_NAME.deeplink.page

    您可以在Dashboard的 Settings > Tokens > 应用名称中查看 YOUR_APP_NAME

如果您使用 Autofill 功能,请参考 Troubleshooting > Webcredentials

使用 AppDelegate 时

对于支持 iOS 12 及更早版本的应用,通常会在 AppDelegate 的 application(_:open:options:) 方法中传递事件。

1. 请打开 ios/[项目名称]/AppDelegate文件。

2. 在下面函数的最顶部调用 handleURLSchemeDeeplink函数,以便当 App 使用 Scheme 打开时,将 Deeplink 信息传递给 SDK。

12345678
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey, id>*)options
{
    [AirBridge.deeplink handleURLSchemeDeeplink:url];

    return YES;
}

3. 在下面函数的最顶部调用 handleUserActivity 函数,以便当 App 使用 Universal Link 打开时,将 Deeplink 信息传递给 SDK。

12345678
-  (BOOL)application:(UIApplication*)application
continueUserActivity:(NSUserActivity*)userActivity
  restorationHandler:(void (^)(NSArray* _Nullable))restorationHandler
{
    [AirBridge.deeplink handleUserActivity:userActivity];

    return YES;
}

Attention

对于使用 SceneDelegate 的项目,URL 会传递给 SceneDelegate 而不是 AppDelegate。
关于用 SceneDelegate 接收 URL 的方法,请参考下一节: 使用 SceneDelegate时。

使用 SceneDelegate时

对于支持 iOS 13 及更高版本的应用,如果使用 SceneDelegate,DeepLink将通过以下方法传递。

  • 应用处于 Not running 状态时加载的情况:

    • scene(_:willConnectTo:options:)

  • 其他情况(例如,background):

    • Universal link: scene(_:continue:)

    • Scheme link: scene(_:openURLContexts:)

123456789101112131415161718192021222324252627282930313233343536
import UIKit
import AirBridge

@available(iOS 13, *)
class SceneDelegate: UIWindowSceneDelegate {
    var window: UIWindow?

    // Receive links after the app's killed 
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        if let schemeLinkURL = connectionOptions.urlContexts.first?.url {
            // Scheme
            AirBridge.deeplink()?.handleURLSchemeDeeplink(schemeLinkURL)
        } else if let userActivity = connectionOptions.userActivities.first {
            // Universal
            AirBridge.deeplink()?.handle(userActivity)
        }
        
        // ...
    }
  
    // Receive universal link
    func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
        AirBridge.deeplink().handle(userActivity)
        // ...
    }
  
    // Receive scheme link
    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
        guard let schemeLinkURL = URLContexts.first?.url else {
             return
        }
        
        AirBridge.deeplink().handleURLSchemeDeeplink(schemeLinkURL)
        // ...
    }
}

不使用 AppDelegate 和 SceneDelegate 的情况(SwiftUI)

如果您使用 SwiftUI但并不使用 SceneDelegate时,将通过 onOpenUrl 接收到DeepLink。与 SDK 初始化一样,需在具有 @main 的 App 类中添加相应方法。

123456789101112131415161718192021222324
import SwiftUI
import AirBridge

@main
@available(iOS 14, *)
struct OnlyUIApp: App {

    ...
    
    var body: some Scene {
        WindowGroup {
            ContentView()
                .onOpenURL { url in
                    if url.scheme != "http" && url.scheme != "https" {
                        // Scheme link
                        AirBridge.deeplink()?.handleURLSchemeDeeplink(url)
                    }
                }
                .onContinueUserActivity(NSUserActivityTypeBrowsingWeb) { userActivity in
                    AirBridge.deeplink()?.handle(userActivity)
               }
        }
    }
}

Attention

对于使用 SwiftUI 并具有 SceneDelegate 的项目,您不能使用 onOpenUrl。在这种情况下,请参考上面的使用 SceneDelegate时

使用 AppDelegate时

  1. 请打开 ios/[项目名称]/AppDelegate文件。

  2. AppDelegateapplication(_:didFinishLaunchingWithOptions:)中使用 setDeeplinkCallback 函数设置当 App 使用DeepLink打开时调用的回调。

AppDelegateapplication(_:didFinishLaunchingWithOptions:)中使用 setDeeplinkCallback 函数设置当 App 使用DeepLink打开时调用的回调。

12345678
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
    [AirBridge getInstance:@"YOUR_APP_TOKEN" appName:@"YOUR_APP_NAME" withLaunchOptions:launchOptions];

    [AirBridge.deeplink setDeeplinkCallback:^(NSString* deeplink) {
        // Deeplink from airbridge = YOUR_SCHEME://...
        NSLog(@"DeeplinkCallback : %@", deeplink);
    }];
}

不使用 AppDelegate 的情况(SwiftUI

与 SDK 初始化一样,需在具有 @main 的 App 类的构造函数中添加相应方法。

12345678910111213141516171819
import SwiftUI
import AirBridge

@main
@available(iOS 14, *)
struct OnlyUIApp: App {
    init() {
        AirBridge.getInstance("YOUR_APP_TOKEN", appName: "YOUR_APP_NAME")
        AirBridge.deeplink()?.setDeeplinkCallback { deeplink in
            print(deeplink)
        }
    }
    
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
  • 使用 Airbridge iOS SDK 1.10.0 ~ 1.10.9版本的情况下: Airbridge Deeplink将以

    https://YOUR_APP_NAME.airbridge.io/...的形式传递。

  • 使用 Airbridge iOS SDK ~ 1.9.10版本的情况下: Airbridge Deeplink将以

    https://YOUR_APP_NAME.airbridge.io/...YOUR_SCHEME://...的形式传递。

自定义域名设置(可选)

如果在 Airbridge Tracking Link 中使用自定义域名,请将设置的自定义域名添加到 example.com 部分,并按照以下方式进行设置。

  1. 请转到 Xcode> Project 文件> Signing & Capabilities> Associated Domains

  2. 点击 +按钮,并添加 applinks:example.com

  3. 请打开 info.plist

  4. 请添加以下值。

验证DeepLink设置

当点击 Airbridge Dashboard的 iOS URI Scheme 中输入的 YOUR_SCHEME://... 形式的DeepLink时,请检查应用程序是否打开并发送 Deeplink 事件。

例如) example://

  1. 请点击DeepLink。

  2. 请在 Airbridge Dashboard> Raw DataApp Real-time Logs中检查 Deeplink 事件是否存在。

Was this page helpful?

Have any questions or suggestions?