رابطهای برنامهنویسی کاربردی (API) هوم برای iOS از یک هاب Matter برای راهاندازی یک دستگاه روی پارچه استفاده میکنند. در طول راهاندازی، برنامه یک دستور را به SDK و سپس به هاب ارسال میکند.
برای راهاندازی دستگاه Matter :
با استفاده از
structure.prepareForMatterCommissioning()بهHome APIs iOS SDKاطلاع دهید تا برای درخواستهای راهاندازی Matter آماده شود. این دستور موارد زیر را انجام میدهد:- تأیید کنید که مجوز اعطا شده است.
- مطمئن شوید که هاب آنلاین و قابل دسترس است.
- مطمئن شوید که هیچ جلسه راهاندازی فعال دیگری در حال انجام نیست.
do { try await structure.prepareForMatterCommissioning() } catch { // Failed to prepare for Matter Commissioning return }برای شروع جریان پشتیبانی Matter اپل، یک درخواست با
MatterAddDeviceRequest()ایجاد کنید.let topology = MatterAddDeviceRequest.Topology( ecosystemName: "Google Home", homes: [MatterAddDeviceRequest.Home(displayName: structure.name)] ) let request = MatterAddDeviceRequest(topology: topology)درخواست را با
perform()اجرا کنید. اگر خطایی رخ داد، درخواست راهاندازی را باstructure.cancelMatterCommissioning()لغو کنید.do { // Starting MatterAddDeviceRequest. try await request.perform() // Successfully completed MatterAddDeviceRequest. let commissionedDeviceIDs = try structure.completeMatterCommissioning() // Commissioned device IDs. } catch let error { structure.cancelMatterCommissioning() // Failed to complete MatterAddDeviceRequest. }یک
App Group IDدر کنسول توسعهدهندگان اپل ایجاد کنید تا برنامه بتواند هنگام راهاندازی دستگاه با افزونهMatterAddDeviceارتباط برقرار کند.همچنین برای استفاده از این شناسه گروه، باید شناسه بسته نرمافزاری و پروفایلهای تأمین خود را بهروزرسانی کنید.
هنگام مقداردهی اولیه، نمونه
Homeرا طوری پیکربندی کنید که از شناسه گروه استفاده کند.func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { Home.configure { $0.sharedAppGroup = "group.com.sample.app.commissioning" } return true }افزونه iOS Matter App از اپل را پیادهسازی کنید.
کد نمونه، نمونهای از پیادهسازی یک زیرکلاس از API
MatterAddDeviceExtensionRequestHandlerاپل را نشان میدهد.حداقل، چارچوب
GoogleHomeMatterCommissionerSDKرا به افزونه هدف اضافه کنید و سه روش را برای فراخوانی APIهایHomeMatterCommissionerGoogle Home platform بازنویسی کنید.-
commissionDevice -
rooms -
configureDevice
import MatterSupport import GoogleHomeSDK import OSLog final class RequestHandler: MatterAddDeviceExtensionRequestHandler { // The App Group ID defined by the application to share information between the extension and main app. private static var appGroup = "group.com.sample.app.commissioning" ... // MARK: - Home API commissioning handlers /// Commissions a device to the Google Home ecosystem. /// - Parameters: /// - home: The home that the device will be added to /// - onboardingPayload: The payload to be sent to the Matter Commissioning SDK to commission the device. /// - commissioningID: An identifier not used by the Home API SDK. override func commissionDevice(in home: MatterAddDeviceRequest.Home?, onboardingPayload: String, commissioningID: UUID) async throws { // Commission Matter device with payload. var onboardingPayloadForHub = onboardingPayload let homeMatterCommissioner = try HomeMatterCommissioner(appGroup: RequestHandler.appGroup) try await homeMatterCommissioner.commissionMatterDevice( onboardingPayload: onboardingPayloadForHub) } /// Obtains rooms from the Home Ecosystem to present to the user during the commissioning flow. /// - Parameter home: The home that the device will be added to. /// - Returns: A list of rooms if obtained from the Google Home ecosystem or an empty list if there was an error in getting them. override func rooms(in home: MatterAddDeviceRequest.Home?) async -> [MatterAddDeviceRequest.Room] { do { let homeMatterCommissioner = try HomeMatterCommissioner(appGroup: RequestHandler.appGroup) let fetchedRooms = try homeMatterCommissioner.fetchRooms() // Returning fetched rooms. return fetchedRooms } catch { // Failed to fetch rooms with error return [] } } /// Pushes the device's configurations to the Google Home Ecosystem. /// - Parameters: /// - name: The friendly name the user chose to set on the device. /// - room: The room identifier that the user chose to put the device in. override func configureDevice(named name: String, in room: MatterAddDeviceRequest.Room?) async { // Configure Device name: room do { let homeMatterCommissioner = try HomeMatterCommissioner(appGroup: RequestHandler.appGroup) await homeMatterCommissioner.configureMatterDevice( deviceName: name, roomName: room?.displayName) } catch { // Configure Device failed with error } } }-