跳到主要内容

快速开始

本指南将帮助您快速开始使用 AIBuds SDK iOS,包括基础配置和常见操作。

使用 AI 辅助实现

使用 AI 开发

让 AI 帮助实现此工作流

使用官方“集成 AIBuds SDK”技能,根据你的 App 完成实现。

请阅读并遵循 https://docs-aibuds.github.io/zh-Hans/skills/integrate-aibuds-sdk,使用该技能在当前 iOS 项目中完成“集成 AIBuds SDK”,并验证结果。
查看官方技能

第 1 步:导入 SDK

在使用 SDK 的文件中导入所需模块:

Swift
import AIBuds
import ABMate
import AIBudsLog
import AIBudsAIFoundation
import AIBudsAI
import AIBudsStarBurst
import AIBudsMagicHelper
import AIBudsVoiceAssistant
import AIBudsXLFacility
import AIBudsLiveStream
import AIBudsCrashReporter
import AIBudsAllInOne

第 2 步:初始化 SDK

首先在应用中初始化 AIBuds SDK。通常应在 AppDelegateSceneDelegate 中完成:

Swift
// AppDelegate.swift

func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
    // Initialize AIBuds SDK with Full Installation
    initWithFullInstallation()

    // Initialize AIBuds SDK with Custom Installation
    //initWithCustomInstallation()

    return true
}

/// Initialize AIBuds SDK with Full Installation
private func initWithFullInstallation() {
    // Initialize AIBuds SDK
    if !AllInOneSDK.init(withDelegate: self) {
        print("Failed to initialize AIBuds AllInOne SDK.")
    }

    // Install crash reporter
    AllInOneSDK.installCrashReporter { reportFilePath in
        print("Last crash report path: \(reportFilePath ?? "")")
    } reportListUpdateCallback: {
        print("Crash report list updated")
    }
    // Set user info for crash reporter
    CrashReporterSDK.setUserInfo("Tom", forKey: "User Name")
    CrashReporterSDK.setUserInfo("199", forKey: "User ID")

    // Start AI dashboard
    AllInOneSDK.startAIDashboard()
}

/// Initialize AIBuds SDK with Custom Installation
private func initWithCustomInstallation() {
    // Set XLFacility plugin
    AIBudsLogSDK.setXLFacilityPlugin(XLFacilitySDK.shared())

    // Initialize AIBuds SDK with all Ble SDKs you would like to integrate into your app
    let sdkConfiguration = SDKConfiguration.default()
    // Set log level to verbose
    sdkConfiguration.logLevel = .verbose
    let success = AIBudsSDK.initialize(
        [ABMateSDK.shared()],
        configuration: sdkConfiguration,
        delegate: self)
    if !success {
        print("AIBudsSDK initialize failed.")
    }

    // Install StarBurst AI plugin
    AIBudsSDK.setStarBurstAIPlugin(StarBurstAuthPlugin.shared())
    // Install MltCloud AI plugin
    AIBudsSDK.setMltCloudAIPlugin(MltCloudAuthPlugin.shared())

    // Install OnDeviceVoiceAssistant plugin
    AIBudsSDK.setOnDeviceVoiceAssistantPlugin(OnDeviceVoiceAssistantPlugin.shared())

    // Initialize AI SDK with all AI SDKs you would like to integrate into your app
    let aiSuccess = AIBudsAISDK.initialize([
        StarBurstSDK.shared(),
        MagicHelperSDK.shared(),
    ])
    if !aiSuccess {
        print("AIBudsAISDK initialize failed.")
    }

    // Install crash reporter
    CrashReporterSDK.installCrashReporter { reportFilePath in
        print("Last crash report path: \(reportFilePath ?? "")")
    } reportListUpdateCallback: {
        print("Crash report list updated")
    }
    // Set user info for crash reporter
    CrashReporterSDK.setUserInfo("Tom", forKey: "User Name")
    CrashReporterSDK.setUserInfo("199", forKey: "User ID")

    // Start AI dashboard
    AIDashboardSDK.start()
}

第 3 步:扫描设备

连接 AIBuds 设备前,先扫描附近可用的设备:

Swift
// Start scanning for devices
AIBudsSDK.startScanning(
    deviceFoundHandler: { device, isExistingDevice in
        print("Found device: \(device.name), RSSI: \(device.rssi)")
        print(isExistingDevice ? "Already stored" : "New device")
    },
    completion: {
        print("Scanning stopped")
    }
)

第 4 步:添加设备

扫描完成后,可将发现的设备添加到“我的设备”,使其在应用重新启动后仍然保留。先将扫描返回的 FoundDeviceConvertible 通过 makeStorableDeviceFromDiscovered(_:) 转换,再使用 StoredDevicesMgr 保存:

Swift
func store(_ discoveredDevice: FoundDeviceConvertible) {
    // Convert the SDK scan result into a persistent device.
    guard let device = AIBudsSDK.makeStorableDeviceFromDiscovered(discoveredDevice) else {
        return
    }

    // Optional app-owned display information.
    device.screenName = device.name
    device.thumbnail = UIImage(named: "icon.glasses")
    device.customContent = "Smart Glasses"

    if StoredDevicesMgr.addDevice(device) {
        AIBudsSDK.stopScanning()
        navigationController?.popViewController(animated: true)
    }
}

第 5 步:连接设备

保存设备后,使用 ConnectParams 发起连接。您可以同时传入 AI 鉴权参数,让 SDK 在连接过程中完成对应 AI 服务商的鉴权:

Swift
let device = devices[indexPath.item]

let param = ConnectParams()
let aiAuthParams = AIAuthParams()

// StarBurst AI auth
let starBurstAuthParams = StarBurstAIAuthParams()
starBurstAuthParams.productId = configs["STARBURST_PRODUCTID"]
if let ppeEnv = configs["STARBURST_PPEENV"] as? String, !ppeEnv.isEmpty {
    starBurstAuthParams.ppeEnv = ppeEnv
}
aiAuthParams.starburst = starBurstAuthParams

// MltCloud AI auth
let mltCloudAuthParams = MltCloudAIAuthParams()
mltCloudAuthParams.channelId = configs["MLTCLOUD_CHANNELID"]
aiAuthParams.mltcloud = mltCloudAuthParams

param.aiAuthParams = aiAuthParams
param.userId = "199"

// Connect to the device
device.connect(param)

第 6 步:发送指令

设备连接后,即可向设备发送指令:

Swift
// Example: Set device time
guard let device = device as? DeviceInfoAPI else { return }
let date = Date()
device.setDeviceTime(date) { success, statusCode, error in
    if success {
        print("Device time set successfully")
    } else {
        print("Failed to set device time: \(error?.localizedDescription ?? "Unknown error")")
    }
}

第 7 步:处理设备 Delegate

实现 DeviceDelegate 协议以接收设备连接生命周期事件。所有方法均为 @objc optional,只需实现实际需要的回调:

Swift
// Mark your class as the device's delegate
device.delegate = self

// Implement the optional delegate methods
extension YourViewController: DeviceDelegate {
    func didStartConnectingDevice(_ device: DeviceConvertible) {
        print("Connecting to \(device.name)…")
    }

    func didConnectedToDevice(_ device: DeviceConvertible) {
        print("Connected to \(device.name)")
    }

    func didFailToConnectDevice(_ device: DeviceConvertible?, error: NSError?) {
        print("Failed to connect: \(error?.localizedDescription ?? "Unknown error")")
    }

    func device(_ device: DeviceConvertible?, didDisconnectWithError error: NSError?) {
        if let error {
            print("Disconnected with error: \(error.localizedDescription)")
        } else {
            print("Disconnected")
        }
    }

    func deviceDidReady(_ device: DeviceConvertible) {
        print("Device ready: \(device.name)")
    }

    /// ... other delegate methods...
}

第 8 步:断开设备连接

不再使用设备时,应主动断开连接:

Swift
// Disconnect from a device
device.disconnect()

示例应用

如需完整示例,请查看 AIBudsSDK-Demo 项目。该项目演示了如何在实际应用中使用 SDK。

后续步骤

掌握基础用法后,可以继续了解 SDK 的更多高级功能: