このトピックでは、iOS 用 Link SDK を初期化して、デバイスと IoT Platform 間の接続を確立する方法について説明します。
背景情報
iOS 用 Link SDK は、デバイスごとに一意の証明書検証方式のみをサポートしています。詳細については、「デバイスごとに一意の証明書検証」をご参照ください。
Java 用 IoT Platform SDK の初期化
サンプルコード:
#import <IotLinkKit/IotLinkKit.h>
// SDK を初期化する前に、永続的な接続の状態変化を監視するリスナーを作成する必要があります。
[[LinkKitEntry sharedKit] registerChannelListener:self];
//// デバイス証明書情報を指定します。
self.productKey = self.textFieldProductKey.text ;
self.deviceName = self.textFieldDeviceName.text ;
self.deviceSecret = self.textFieldDeviceSecret.text;
LinkkitChannelConfig * channelConfig = [[LinkkitChannelConfig alloc] init];
channelConfig.productKey = self.productKey;
channelConfig.deviceName = self.deviceName;
channelConfig.deviceSecret = self.deviceSecret;
channelConfig.cleanSession = (self.cleanSession == 1);
//channelConfig.server = @"your custom server url"; //カスタムサーバーの URL
//channelConfig.port = 1883; //ポート番号
LinkkitSetupParams * setupParams = [[LinkkitSetupParams alloc] init];
setupParams.appVersion = self.appVersion;
setupParams.channelConfig = channelConfig;
[[LinkKitEntry sharedKit] setup:setupParams resultBlock:^(BOOL succeeded, NSError * _Nullable error) {
LinkkitLogDebug(@"setup error : %@", error);
dispatch_async(dispatch_get_main_queue(), ^{
[self ims_showHUDWithMessage:[NSString stringWithFormat:@ "初期化 :%@",
succeeded ? @ "成功" : @ "失敗"]];
});
}];
SDK を初期化すると、永続的な MQTT 接続が確立されているかどうかに関係なく、
resultBlock
が返されます。[[LinkKitEntry sharedKit] registerChannelListener:self]
関数を呼び出すことで、[onConnectStateChange:state:]
コールバック関数の戻り値に基づいて、永続的な接続が確立されているかどうかを確認できます。
パラメータ
パラメータ | 例 | 説明 |
productKey | a18wP****** | IoT Platform コンソールの [デバイスの詳細] ページでデバイス証明書を表示できます。詳細については、「デバイス検証情報の取得」をご参照ください。 |
deviceName | LightSwitch | |
deviceSecret | uwMTmVAMnGGHaAkqmeDY6cHxxB****** | |
server | a18wP******.iot-as-mqtt.cn-shanghai.aliyuncs.com | デバイスを接続するエンドポイント。
|
SDK の初期化解除
SDK を初期化解除する前に、デバイスと IoT Platform 間の永続的な MQTT 接続を閉じます。SDK を初期化解除するには、次の API 操作を呼び出します。
[[LinkKitEntry sharedKit] destroy:^(BOOL succeeded, NSError * _Nullable error) {
LinkkitLogDebug(@"kit destroy error : %@", error);
dispatch_async(dispatch_get_main_queue(), ^{
[self ims_showHUDWithMessage:[NSString stringWithFormat:@ "初期化解除: %@",
succeeded ? @ "成功" : @ "失敗"]];
});
}];
ログスイッチ
SDK の内部ログ出力スイッチをオンにします。
#import <IMSLog/IMSLog.h>
NSString * const IMS_DEMO_TAG = @"LinkkitDemo";
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// ログ機能を有効にするには、次のコードを追加します。
[IMSLog setAllTagsLevel:IMSLogLevelAll];
// ログパネルを作成し、ログフレームワークに追加します。
//[IMSLog addAssistant:[[IMSDashboardLogAssistant alloc] init]];
// コンソールにログを表示できるようにします。
[IMSLog showInConsole:YES];
// ログタグを指定します。
[IMSLog registerTag:IMS_DEMO_TAG];
return YES;
}
永続的な MQTT 接続の状態変化を監視するリスナーを作成する
サンプルコード:
- (void)onConnectStateChange:(nonnull NSString *)connectId state:(LinkkitChannelConnectState)state {
NSString * connectTip = nil;
if (state == LinkkitChannelStateConnected) {
connectTip = @ "接続済み";
} else if (state == LinkkitChannelStateDisconnected) {
connectTip = @ "未接続";
} else {
connectTip = @ "接続中";
}
dispatch_async(dispatch_get_main_queue(), ^{
self.labelConnectState.text = connectTip;
});
}
- (void)onNotify:(nonnull NSString *)connectId topic:(nonnull NSString *)topic data:(id _Nullable)data {
NSString * downData = [NSString stringWithFormat:@ "プッシュされたデータを受信しました。 topic :%@ \r\n", topic];
downData = [downData stringByAppendingString:[NSString stringWithFormat:@ "\r \ndata :%@", data]];
LinkkitLogDebug(@"kit recv topic : %@", topic);
dispatch_async(dispatch_get_main_queue(), ^{
self.textViewDownData.text = downData;
});
}
- (BOOL)shouldHandle:(nonnull NSString *)connectId
topic:(nonnull NSString *)topic {
return YES;
}