Flutter物联网认证插件mi_iot_token的使用

Flutter物联网认证插件mi_iot_token的使用

mi_iot_token 是一个用于控制小米设备的 Dart 包。通过该包,你可以利用小米云来控制你的设备,并且支持多平台,包括移动设备、桌面和浏览器。

特性

  • 通过用户名和密码获取小米云 IoT Token。
  • 获取设备列表。
  • 获取设备属性。
  • 设置设备属性。
  • 调用设备操作。

开始使用

添加依赖

pubspec.yaml 文件中添加依赖:

dependencies:
  mi_iot_token: ^1.1.0

使用示例

以下是一个完整的示例,展示了如何使用 mi_iot_token 插件控制小米设备。

首先,确保你有一个配置文件(例如 my_config.json),其中包含登录信息和设备信息。

{
  "account": {
    "username": "your_username",
    "password": "your_password"
  },
  "device": {
    "did": "your_device_id",
    "getProps": ["prop1", "prop2"],
    "setProps": {"prop1": "value1"},
    "action": {
      "name": "action_name",
      "params": {"param1": "value1"}
    }
  }
}

接下来是完整的示例代码:

import 'dart:convert';
import 'dart:io';

import 'package:mi_iot_token/mi_iot_token.dart';

void main() async {
  MiCloud miCloud = MiCloud();
  var account = null;
  var deviceConfig = null;

  // 从配置文件中读取账号和设备信息
  final configFile = File('./example/my_config.json');
  final jsonString = await configFile.readAsString();
  final dynamic jsonMap = jsonDecode(jsonString);

  account = jsonMap['account'];
  deviceConfig = jsonMap['device'];

  // 登录小米云
  await miCloud.login(account["username"], account['password']);
  print("登录成功");

  // 设置区域,如果不确定可以不设置
  miCloud.setRegion('cn');

  // 获取设备列表
  var devices = await miCloud.getDevices();
  print("设备列表: $devices");

  // 通过设备ID获取设备信息
  var device = await miCloud.getDeviceData(deviceConfig['did']);
  print("设备信息: $device");

  // 获取设备属性
  var result = await miCloud.getMiotProps(deviceConfig['getProps']);
  print("获取的属性: $result");

  // 设置设备属性
  var setResult = await miCloud.setMiotProps(deviceConfig['setProps']);
  print("设置属性结果: $setResult");

  // 调用设备操作
  var actionResult = await miCloud.miotAction(deviceConfig['action']);
  print("操作结果: $actionResult");
}

设备规格参考

地区(未验证)

如果你不确定使用哪个地区,可以尝试不设置地区。

以下是所有国家或地区的两字母代码(不区分大小写):

阿富汗: AF
阿尔巴尼亚: AL
阿尔及利亚: DZ
美属萨摩亚: AS
安道尔: AD
安哥拉: AO
安圭拉: AI
南极洲: AQ
安提瓜和巴布达: AG
阿根廷: AR
亚美尼亚: AM
阿鲁巴: AW
澳大利亚: AU
奥地利: AT
阿塞拜疆: AZ
巴哈马: BS
巴林: BH
孟加拉国: BD
巴巴多斯: BB
白俄罗斯: BY
比利时: BE
伯利兹: BZ
贝宁: BJ
百慕大: BM
不丹: BT
玻利维亚: BO
波斯尼亚和黑塞哥维那: BA
博茨瓦纳: BW
布维岛: BV
巴西: BR
英属印度洋领地: IO
文莱达鲁萨兰国: BN
保加利亚: BG
布基纳法索: BF
布隆迪: BI
柬埔寨: KH
喀麦隆: CM
加拿大: CA
佛得角: CV
开曼群岛: KY
中非共和国: CF
乍得: TD
智利: CL
中国: CN
圣诞岛: CX
科科斯(基灵)群岛: CC
哥伦比亚: CO
科摩罗: KM
刚果: CG
刚果民主共和国: CD
库克群岛: CK
哥斯达黎加: CR
科特迪瓦: CI
克罗地亚: HR
古巴: CU
塞浦路斯: CY
捷克共和国: CZ
丹麦: DK
吉布提: DJ
多米尼克: DM
多米尼加共和国: DO
厄瓜多尔: EC
埃及: EG
萨尔瓦多: SV
赤道几内亚: GQ
厄立特里亚: ER
爱沙尼亚: EE
埃塞俄比亚: ET
福克兰群岛(马尔维纳斯群岛): FK
法罗群岛: FO
斐济: FJ
芬兰: FI
法国: FR
法属圭亚那: GF
法属波利尼西亚: PF
法属南部领土: TF
加蓬: GA
冈比亚: GM
格鲁吉亚: GE
德国: DE
加纳: GH
直布罗陀: GI
希腊: GR
格陵兰: GL
格林纳达: GD
瓜德罗普: GP
关岛: GU
危地马拉: GT
根西岛: GG
几内亚: GN
几内亚比绍: GW
圭亚那: GY
海地: HT
赫德岛和麦克唐纳群岛: HM
梵蒂冈城国: VA
洪都拉斯: HN
香港: HK
匈牙利: HU
冰岛: IS
印度: IN
印度尼西亚: ID
伊朗伊斯兰共和国: IR
伊拉克: IQ
爱尔兰: IE
马恩岛: IM
以色列: IL
意大利: IT
牙买加: JM
日本: JP
泽西岛: JE
约旦: JO
哈萨克斯坦: KZ
肯尼亚: KE
基里巴斯: KI
朝鲜: KP
韩国: KR
科威特: KW
吉尔吉斯斯坦: KG
老挝人民民主共和国: LA
拉脱维亚: LV
黎巴嫩: LB
莱索托: LS
利比里亚: LR
利比亚阿拉伯杰马利亚: LY
列支敦士登: LI
立陶宛: LT
卢森堡: LU
澳门: MO
北马其顿: MK
马达加斯加: MG
马拉维: MW
马来西亚: MY
马尔代夫: MV
马里: ML
马耳他: MT
马绍尔群岛: MH
马提尼克: MQ
毛里塔尼亚: MR
毛里求斯: MU
马约特: YT
墨西哥: MX
密克罗尼西亚联邦: FM
摩尔多瓦共和国: MD
摩纳哥: MC
蒙古: MN
黑山: ME
蒙特塞拉特: MS
摩洛哥: MA
莫桑比克: MZ
缅甸: MM
纳米比亚: NA
瑙鲁: NR
尼泊尔: NP
荷兰: NL
荷属安的列斯: AN
新喀里多尼亚: NC
新西兰: NZ
尼加拉瓜: NI
尼日尔: NE
尼日利亚: NG
纽埃: NU
诺福克岛: NF
北马里亚纳群岛: MP
挪威: NO
阿曼: OM
巴基斯坦: PK
帕劳: PW
巴勒斯坦被占领土: PS
巴拿马: PA
巴布亚新几内亚: PG
巴拉圭: PY
秘鲁: PE
菲律宾: PH
皮特凯恩群岛: PN
波兰: PL
葡萄牙: PT
波多黎各: PR
卡塔尔: QA
留尼汪: RE
罗马尼亚: RO
俄罗斯联邦: RU
卢旺达: RW
圣巴泰勒米: BL
圣赫勒拿: SH
圣基茨和尼维斯: KN
圣卢西亚: LC
圣马丁(法国部分): MF
圣皮埃尔和密克隆: PM
圣文森特和格林纳丁斯: VC
萨摩亚: WS
圣马力诺: SM
圣多美和普林西比: ST
沙特阿拉伯: SA
塞内加尔: SN
塞尔维亚: RS
塞舌尔: SC
塞拉利昂: SL
新加坡: SG
斯洛伐克: SK
斯洛文尼亚: SI
所罗门群岛: SB
索马里: SO
南非: ZA
南乔治亚岛和南桑威奇群岛: GS
西班牙: ES
斯里兰卡: LK
苏丹: SD
苏里南: SR
斯瓦尔巴和扬马延: SJ
斯威士兰: SZ
瑞典: SE
瑞士: CH
叙利亚阿拉伯共和国: SY
台湾省: TW
塔吉克斯坦: TJ
坦桑尼亚联合共和国: TZ
泰国: TH
东帝汶: TL
多哥: TG
托克劳: TK
汤加: TO
特立尼达和多巴哥: TT
突尼斯: TN
土耳其: TR
土库曼斯坦: TM
特克斯和凯科斯群岛: TC
图瓦卢: TV
乌干达: UG
乌克兰: UA
阿拉伯联合酋长国: AE
英国: GB
美国: US
美国小岛屿: UM
乌拉圭: UY
乌兹别克斯坦: UZ
瓦努阿图: VU
委内瑞拉: VE
越南: VN
英属维尔京群岛: VG
美属维尔京群岛: VI
瓦利斯和富图纳: WF
西撒哈拉: EH
也门: YE
赞比亚: ZM
津巴布韦: ZW

更多关于Flutter物联网认证插件mi_iot_token的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter物联网认证插件mi_iot_token的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter项目中,使用mi_iot_token插件进行物联网认证通常涉及与小米物联网平台的交互。以下是一个基本的代码示例,展示了如何在Flutter项目中使用mi_iot_token插件进行认证。

首先,确保你已经在pubspec.yaml文件中添加了mi_iot_token依赖:

dependencies:
  flutter:
    sdk: flutter
  mi_iot_token: ^最新版本号 # 替换为实际的最新版本号

然后,运行flutter pub get来获取依赖。

接下来,在你的Flutter项目中,你可以按照以下步骤进行物联网认证:

  1. 导入插件
import 'package:mi_iot_token/mi_iot_token.dart';
  1. 初始化插件并获取Token
void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String? token;
  String? errorMessage;

  @override
  void initState() {
    super.initState();
    _getMiIotToken();
  }

  Future<void> _getMiIotToken() async {
    try {
      // 这里假设你已经有了小米账号的access_token和相关的认证信息
      String appId = '你的小米应用ID';
      String appSecret = '你的小米应用密钥';
      String userId = '用户ID'; // 通常是小米账号的UID
      String deviceId = '设备ID'; // 需要认证的设备ID
      String nonce = '随机数'; // 用于防止重放攻击的随机数
      String timestamp = '${DateTime.now().millisecondsSinceEpoch}'; // 当前时间戳

      // 创建MiIotToken实例
      final MiIotToken miIotToken = MiIotToken(appId: appId, appSecret: appSecret);

      // 获取token(这里是一个简化的例子,实际使用中可能需要根据小米的API文档调整参数)
      final Map<String, dynamic> payload = {
        'uid': userId,
        'did': deviceId,
        'nonce': nonce,
        'timestamp': timestamp,
        // 可能还需要其他参数,根据小米API文档添加
      };

      // 注意:这里的generateToken方法是一个假设的方法,实际使用时请参考mi_iot_token插件的文档
      String generatedToken = await miIotToken.generateToken(payload);

      // 通常,你需要将这个token发送到你的服务器或者小米的服务器进行验证
      setState(() {
        token = generatedToken;
        errorMessage = null;
      });

      // 下面的代码展示了如何使用这个token(假设已经验证通过)
      // 例如,发送token到服务器进行设备绑定等操作
      // _sendTokenToServer(generatedToken);

    } catch (e) {
      setState(() {
        token = null;
        errorMessage = e.toString();
      });
    }
  }

  // 假设的发送token到服务器的方法(实际使用时需要替换为真实的API调用)
  Future<void> _sendTokenToServer(String token) async {
    // TODO: 实现发送token到服务器的逻辑
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Mi IOT Token Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                'Token:',
                style: TextStyle(fontSize: 20),
              ),
              SizedBox(height: 10),
              Text(
                token ?? 'Loading...',
                style: TextStyle(fontSize: 20),
              ),
              SizedBox(height: 20),
              if (errorMessage != null)
                Text(
                  'Error: $errorMessage',
                  style: TextStyle(color: Colors.red, fontSize: 18),
                ),
            ],
          ),
        ),
      ),
    );
  }
}

注意

  • 上面的代码是一个简化的示例,实际使用中mi_iot_token插件的API可能有所不同,你需要参考插件的官方文档。
  • generateToken方法是一个假设的方法,实际插件中可能使用不同的方法来生成或获取token。
  • 小米物联网平台的认证流程可能涉及多个步骤,包括获取用户授权、生成设备token等,你需要仔细阅读小米的开发者文档。
  • 在生产环境中,请确保妥善处理敏感信息,如appSecret等,不要将它们硬编码在客户端代码中。

由于mi_iot_token插件的具体实现和API可能会随着版本更新而变化,因此强烈建议查阅最新的插件文档和示例代码。

回到顶部