Demo App主要介紹App的開發(fā)流程,以及App的業(yè)務(wù)邏輯。在您開發(fā)自己的App前,建議您按照本文檔完成Demo App的操作。

前提條件

  • 已在生活物聯(lián)網(wǎng)平臺創(chuàng)建了對應(yīng)的產(chǎn)品,并完成產(chǎn)品功能定義、配置App等相關(guān)操作。
  • 已在生活物聯(lián)網(wǎng)平臺創(chuàng)建了一個(gè)自有品牌App,并完成Demo App的源碼下載。詳細(xì)操作請參見創(chuàng)建自有App

DemoApp 源碼結(jié)構(gòu)說明

Demo源碼

App模塊負(fù)責(zé)應(yīng)用的業(yè)務(wù)邏輯,其中包括了Demo對應(yīng)的功能演示:設(shè)備本地發(fā)現(xiàn)、設(shè)備配網(wǎng)、設(shè)備綁定和設(shè)備狀態(tài)的獲取和控制功能。java/com/aliyun/iot的詳細(xì)子目錄介紹如下。

  • ilop/startpage: 演示了如何自定義國家選擇頁面
  • ilop/demo/SDKInitHelper.java:演示了使用統(tǒng)一接口初始化各種SDK
  • aep/oa:演示了如何自定義手機(jī)區(qū)域碼選擇頁面
  • aep/sdk/receiver:演示了如何利用廣播接收器處理推送消息和通知
  • ilop/demo/page/login3rd下
    • AuthCodeFragment.java:演示了如何用三方賬號進(jìn)行授權(quán)登錄
    • OALoginActivity.java:演示了如何自定義登錄頁面

運(yùn)行Demo App

介紹通過Android Studio導(dǎo)入Demo App,并構(gòu)建APK的操作。

  1. 打開Android Studio,選擇File > Open...,導(dǎo)入Demo App源碼。
  2. 集成安全圖片,操作請參見集成安全圖片
    說明 安全圖片請勿重命名,否則會(huì)導(dǎo)致SDK初始化失敗。請您下載后直接放到App代碼工程下。
  3. (可選)Demo App中添加攝像頭設(shè)備。
    1. 打開Demo App工程,在build.gradle中找到dependencies,添加Link Visual面板的引用。
      implementation project(':ipcview')
    2. 解注釋Link Visual面板初始化代碼。

      src\main\java\com\aliyun\iot\ilop\demo\DemoApplication.java中,去掉以下代碼前的注釋符。

      IPCViewHelper.getInstance().init(this,"2.0.0");
    3. 解注釋跳轉(zhuǎn)Link Visual的代碼。

      src\main\java\com\aliyun\iot\ilop\demo\page\ilopmain\HomeTabFragment.java中,去掉以下代碼前的注釋符。

      Intent intent = new Intent(getActivity(), IPCameraActivity.class);
      intent.putExtra("iotId", iotId);
      intent.putExtra("appKey", EnvConfigure.getEnvArg(EnvConfigure.KEY_APPKEY));
      startActivity(intent);
    4. 替換產(chǎn)品的ProductKey

      src\main\java\com\aliyun\iot\ilop\demo\page\ilopmain\HomeTabFragment.java中,示例ProductKey替換為自己產(chǎn)品的ProductKey

  4. 在Demo App目錄下,執(zhí)行以下命令構(gòu)建APK。
    ./gradlew clean build
    說明
    • 請配置JDK為1.8版本。
    • 3.0.0版本的打包插件,需要 Android Studio 3.0以上的版本支持。
    • 3.0.0版本的打包插件,目前需要訪問Google的倉庫,請注意網(wǎng)絡(luò)環(huán)境。

Demo App業(yè)務(wù)邏輯介紹

默認(rèn)Demo App配置為官方項(xiàng)目和默認(rèn)支持的幾類設(shè)備。

  1. 選擇國家/地區(qū)。
    登錄之前您須先選擇登錄國家/地區(qū)。
    選擇國家/地區(qū)
    說明 如果您需要在國內(nèi)/海外區(qū)域之間切換,切換后需重啟App以生效。
  2. 注冊或登錄賬號。
    App啟動(dòng)后會(huì)顯示如下登錄頁界面。
    1. 單擊免費(fèi)注冊,彈出注冊方式。
    2. 輸入要注冊的手機(jī)號碼或郵箱,并單擊下方發(fā)送短信校驗(yàn)碼。
    3. 輸入收到的校驗(yàn)碼,單擊下一步
    4. 設(shè)置密碼完成登錄。
  3. 切換App的語言。
    我的 > 切換語言中切換App的語言,界面如下圖所示。
    切換語言
    說明 切換App語言后將跳轉(zhuǎn)到登錄界面,用戶需要重新登錄后才生效。
  4. 設(shè)置調(diào)試界面。

    ebugTabFragment調(diào)試界面,調(diào)用com.aliyun.iot.ilop.demo.view.DebugLayout布局,提供以下功能。

    • API通道:API網(wǎng)管調(diào)試
    • 長鏈接通道:長鏈接通道調(diào)試
    • 賬號和用戶:登錄、退出
    • 移動(dòng)推送SDK:可以查看AppKey、ClientID、DeviceID等信息

    BoneMobile插件調(diào)試分為:

    • 開發(fā)環(huán)境、生產(chǎn)環(huán)境切換
    • 本地調(diào)試
    調(diào)試版App
  5. 控制虛擬設(shè)備。
    1. 進(jìn)入主界面,如下圖所示。
      Demo主界面

      如果直接掃碼下載demoAPP體驗(yàn),登錄后會(huì)默認(rèn)創(chuàng)建5個(gè)虛擬設(shè)備。

      如果是下載代碼編譯運(yùn)行,上面顯示的5個(gè)虛擬設(shè)備,并不是默認(rèn)創(chuàng)建的,需要自己更改代碼,在HomeTabFragment里面,將自己項(xiàng)目內(nèi)創(chuàng)建的產(chǎn)品productKey填入下面的pks,再編譯運(yùn)行,才可以創(chuàng)建和體驗(yàn)虛擬設(shè)備。

      /**
       * 將自己項(xiàng)目內(nèi)的pk填入,可以體驗(yàn)虛擬設(shè)備
       */
      //String[] pks = new String[]{"a1AzoSi5TMc", "a1B6cFQldpm", "a1XoFUJWkPr", "a1nZ7Kq7AG1", "a1OX20YJSLk"};
      String[] pks = new String[]{};
    2. 單擊任意一個(gè)設(shè)備,進(jìn)入相應(yīng)的設(shè)備面板界面。
      面板界面
  6. 添加設(shè)備。
    1. 單擊首頁右上角加號。
    2. 選擇待添加的設(shè)備,進(jìn)入添加設(shè)備界面。
      添加設(shè)備界面

      添加設(shè)備支持以下兩種方式。

      • 通過產(chǎn)品列表的形式進(jìn)行配置(如上圖支持添加的設(shè)備)
      • 通過本地網(wǎng)絡(luò)發(fā)現(xiàn)的設(shè)備,或者有支持零配配網(wǎng)方案的設(shè)備,如上圖本地發(fā)現(xiàn)設(shè)備(如果能發(fā)現(xiàn)到本地設(shè)備,則會(huì)自動(dòng)顯示出來)。
      說明 通過產(chǎn)品列表添加需要使用官方項(xiàng)目對應(yīng)的接入產(chǎn)品,這一步目前并沒有真實(shí)設(shè)備可以使用;如果想體驗(yàn)這個(gè)流程,建議通過自主研發(fā)App的形式來完成。

虛擬創(chuàng)建產(chǎn)品的設(shè)備

在沒有真實(shí)設(shè)備可以走通鏈路的情況下,可以使用虛擬設(shè)備進(jìn)行體驗(yàn)和開發(fā)。下面介紹如何為您創(chuàng)建的產(chǎn)品虛擬設(shè)備。

  1. 打開Demo工程com/aliyun/iot/ilop/demo/page/ilopmain/下的HomeTabFragment.java文件。
  2. 查找關(guān)鍵字 pks ,快速定位待修改的位置。
    //注冊虛擬設(shè)備
    Set<String> set = new HashSet<String>();
    ArrayList<String> deviceStrList = new ArrayList<>();
    for (DeviceInfoBean deviceInfoBean : deviceInfoBeanList) {
        set.add(deviceInfoBean.getProductKey());
        deviceStrList.add(deviceInfoBean.getProductKey() + deviceInfoBean.getDeviceName());
    }
    mBundle.putStringArrayList("deviceList", deviceStrList);
    //noinspection MismatchedReadAndWriteOfArray
    String[] pks = new String[]{/*"a1xxxxc", "a1xxxxxm", "a1xxxxr", "a1xxxx1", "a1xxxxk"*/};
    mRegisterCount = 0;
    mVirtualCount = 0;
    //noinspection RedundantOperationOnEmptyContainer
    for (String pk : pks) {
        if (set.add(pk)) {
            mRegisterCount++;
            //registerVirtualDevice(pk);
            addVirtualDevice(pk);
        }
    }
  3. 在控制臺上獲取待體驗(yàn)產(chǎn)品的productKey
    設(shè)備PK
  4. 替換productKey
    String[] pks = new String[]{/*"a1xxxxc", "a1xxxxxm", "a1xxxxr", "a1xxxx1", "a1xxxxk"*/};中的默認(rèn)的productKey替換為自己產(chǎn)品的productKey,示例如下。
    String[] pks = new String[]{/*"xxxx", "xxxxx"*/};
    說明 每個(gè)產(chǎn)品可以申請1個(gè)虛擬設(shè)備,多個(gè)產(chǎn)品productKey之間用逗號間隔。
  5. 重新登錄App,即可使用虛擬設(shè)備體驗(yàn)?zāi)鷦?chuàng)建的產(chǎn)品的控制。