文档中心
机智云 文档中心
English
热搜词
APP
SDK
Android
ios
WIFI
Android SDK 2.0集成指南
文档编辑

SDK_API参考手册

附件:Android_SDK2.0_API参考手册

设备接入SDK概述

1. SDK目的与功能

机智云的设备接入SDK(以下简称SDK)封装了手机(包括PAD等设备)与机智云智能硬件的通讯过程,以及手机与云端的通讯过程。这些过程包括配置入网、发现、连接、控制、心跳、状态上报、报警通知等。使用SDK,可以使得开发者快速完成APP开发,开发者仅需关注APP的UI和UE设计即可,而相对复杂的协议与错误处理等事项可忽略。

2. 机智云物联方案概况

Alt text

3. 找到最合适的SDK

机智云目前提供3套SDK:iOS平台原生SDK、Android平台原生SDK、APICloud跨平台SDK。开发者可以根据项目需要自行选择,其中APICloud版本SDK可以用H5技术一次开发,同时适配iOS和Android两个平台,具体内容请参考:《APICloud SDK 集成指南》。

4. 相关名词定义

4.1. GAgent

全称Gizwits Agent,运行于Wi-Fi模块中,设备通过GAgent接入机智云服务器。 目前已兼容国内主流的Wi-Fi模块, 开发者也可以通过获取GAgent二次开发包实现自定义的模块接入机智云。

4.2. 小循环
智能设备与手机、智能设备与智能设备之间,通过连接同一个路由器实现局域网内部的通信(查看状态或控制),我们称之为小循环。

4.3. 大循环
智能设备通过路由器或直接接入互联网以实现用户的远程监测与控制,我们称为大循环。

4.4. ProductKey
产品标识码,开发者通过机智云后台创建新产品后,自动生成的一个32位字符串。在机智云的数据库中是一个唯一的号码,开发者完成开发写入设备主控MCU后,机智云通过此标识码对设备进行识别并自动完成注册。

4.5. DID
设备号,当一个设备初次接入机智云时,机智云自动根据ProductKey以及设备Wi-Fi模块MAC地址为此设备注册一个did,此did全网唯一,用于与用户的绑定及后续操作。

4.6. PassCode
设备通行证,用于校验用户的绑定/控制权限。当用户发起设备绑定时,只要是合法操作即可拿到此通行证,通过此通行证绑定设备并对设备进行有效期内的查看、控制等操作。GAgent首次运行时生成随机数作为设备通行证,生成后保存在非易失性存储器上。设备上线时需要上报给服务器。

4.7. AppID
应用标识码,当开发者需要为一款智能产品开发应用(包括iOS、Android、Web应用等)时,后台会自动生成一个AppID,并与此设备进行关联。应用开发时需要填入此AppID。

4.8. Onboarding
也叫配置入网,用户将一款基于Wi-Fi的物联网设备配置连接上路由器的过程称为Onboarding。新设备第一次使用时需要知道路由器的账号和密码,以通过路由器连接互联网。由于大多数的物联网设备没有自带的屏幕和键盘,所以需要通过智能手机向设备发送路由器的SSID和密码,这个过程机智云称为Onboarding。机智云提供的Wi-Fi设备接入SDK中已经内置了此配置的功能。

4.9. AirLink
机智云对各种SmartConfig、SmartLink这种UDP广播报方式对设备配置入网的技术统称,兼容了多个Wi-Fi模块厂商的配置协议,总结了一套良好用户体验的标准Onboarding操作流程,机智云的Wi-Fi 设备接入SDK已经内置AirLink技术。

4.10. SoftAP
由于目前各个Wi-Fi模块厂商的Smart Config协议均未完全成熟,也不支持5G路由器信号。机智云在提供了AirLink配置模式的同时也支持SoftAP模式配置设备接入路由器。当设备进入SoftAP配置模式时,设备本身将成为一个AP,智能手机可直接与设备进行连接,然后在手机上的界面上输入路由器的SSID和密码,设备接收到信息的时候会自动尝试连接路由器,连接成功则自动切换到正常使用的模式。

5. 集成准备

5.1. 注册机智云账号
在使用机智云服务前,你需要通过site.gizwits.com注册一个开发者账号。请完整填写你的注册信息。此部分请参考《快速入门》。

5.2. 新建设备接入
此部分请参考《快速入门》。

5.3. 获得 app ID 和产品标识码(productkey)
此部分请参考《快速入门》。

5.4. 下载SDK

Alt text

5.5. 导入SDK
第一步,双击解开压缩包 GizWifiSDK-Android-xxx.zip。

第二步,将解压后的libs目录下所有内容拷贝到指定工程的libs目录,保证下图红框中的文件都加载到了工程中:

Alt text

5.6. 配置AndroidManifest.xml

请将下面权限配置代码复制到 AndroidManifest.xml 文件中:

1
2
3
4
5
6
7
8
9
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />

权限说明:

权限 用途
ACCESS_NETWORK_STATE 允许程序访问有关GSM网络信息
ACCESS_WIFI_STATE 允许程序访问WiFI网络状态信息
READ_PHONE_STATE 允许程序访问手机状态信息
ACCESS_COARSE_LOCATION 允许程序访问CellID或WiFi热点来获取粗略的位置
ACCESS_FINE_LOCATION 允许程序访问精良位置(如GPRS)
WRITE_EXTERNAL_STORAGE 允许程序写入外部SD卡
INTERNET 允许程序打开网络接口
CHANGE_WIFI_STATE 允许程序改变WiFi连接状态
CHANGE_WIFI_MULTICAST_STATE 允许程序改变WiFi多播状态

5.7. Android6.0系统文件读写权限设置

Android 6.0新增了运行时权限动态检测,GizWifiSDK中使用的以下权限需要在运行时判断:ACCESS_FINE_LOCATION,通过这个权限可以检测到手机当前wifi和可连接的wifi列表。

下面以这个权限申请举例说明如何编写动态检测代码:

Android6.0系统为targetSdkVersion小于23的应用默认授予了所申请的所有权限,所以如果App使用的targetSdkVersion低于23,可以正常运行。但如果用户在设置中取消了授予的权限,或者App使用的targetSdkVersion为23以上,需要在App代码中处理。以下以Android Studio举例:

  • 目标SDK版本

在build.gradle中设置targetSdkVersion为23:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.yourcomany.app
minSdkVersion 18
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
  • 检查并申请权限
    需要检查APP是否已经拥有ACCESS_FINE_LOCATION权限,没有则申请权限:
1
2
3
if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {          
ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.ACCESS_FINE_LOCATION }, ACCESS_FINE_LOCATION_REQUEST_CODE);
}
  • 请求权限后,系统会弹出请求权限的对话框:

Alt text

  • 用户选择允许后,会回调onRequestPermissionsResult方法, 该方法可类似如下处理:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
onActivityResult  
Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
doNext(requestCode,grantResults);
}

// 接着根据requestCode和grantResults(授权结果)做相应的后续处理:
private void doNext(int requestCode, int[] grantResults) {
if (requestCode == ACCESS_FINE_LOCATION_REQUEST_CODE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission Granted
} else {
// Permission Denied
}
}
}

Fragment中运行时权限的特殊处理

  • 在Fragment中申请权限,不要使用ActivityCompat.requestPermissions, 直接使用Fragment的requestPermissions方法,否则会回调到Activity onRequestPermissionsResult

  • 如果在Fragment中嵌套Fragment,在子Fragment中使用requestPermissions方 法,onRequestPermissionsResult不会回调回来,建议使用getParentFragment().requestPermissions方法。这个方法会回调到父Fragment中的onRequestPermissionsResult,在回调中加入以下代码可以把回调透传到子Fragment:

1
2
3
4
5
6
7
8
9
10
11
12
Override  
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
List<Fragment> fragments = getChildFragmentManager().getFragments();
if (fragments != null) {
for (Fragment fragment : fragments) {
if (fragment != null) {
fragment.onRequestPermissionsResult(requestCode,permissions,grantResults);
}
}
}
}

5.8. 如何在AndroidStudio上使用GizWifiSDK
第一步、下载sdk 下载地址

下载完成以后请自行解压。

Alt text

第二步、导入jar包到Android Studio

Alt text

第三步、把jar包导成库文件

Alt text

第四步、导入so文件

请在main文件加下创建文件夹jniLibs,将armeabi粘贴到对应的文件夹下:

Alt text

第五步、导入完成以后查看对应的build.gradle

下图中可以看到已经关联库成功:

Alt text

第六步、测试是否成功

Alt text

如果有下面图片中的log的话代表成功:

Alt text

SDK流程简介

1. 通用流程图

Alt text

2. 关键点说明

1)SDK已经封装了所有的用户、配置、发现、连接、控制的过程,开发者使用这些API可以完成上述流程中的功能开发,不需要再自行实现通讯协议。

2)SDK采取回调的工作方式,所以必须设置必要的监听,比如通用监听和设备监听,具体请参见流程详解。SDK在主线程中给APP回调。

3)SDK支持APP在Activity之间以及在Activity和Service之间传递对象。

  • 如果是在activity之间传递对象的话可以用intent来传递

(传递)

1
2
3
4
5
Intent intent = new Intent(Context, A.class);
Bundle bundle = new Bundle();
bundle.putParcelable(“参数名”, 设备类对象);
intent.putExtras(bundle);
startActivity(intent);

(接收)

1
2
Intent intent = getIntent();
intent.getParcelableExtra("参数名");

  • 在activity和service之间传递对象
  • 可以通过广播来传递数据,由一方发送数据另一方接收。

(注册广播)

1
2
3
4
5
IntentFilter filter = new IntentFilter();//创建IntentFilter对象
//注册一个广播,用于接收Activity传送过来的命令,控制Service的行为,如:发送数据,停止服务等
filter.addAction("AAAAAAA");
//注册Broadcast Receiver
registerReceiver(cmdReceiver, filter);

(发送广播)

1
2
3
4
5
6
Intent intent = new Intent();  
intent.setAction("AAAAAAA");
Bundle bundle = new Bundle();
bundle.putParcelable(“参数名”, 设备类对象);
intent.putExtras(bundle);
sendOrderedBroadcast(intent, null);
  • 另外一种,是在Activity中通过bindService获取到Service对象,直接调用Service方法获取想要的设备对象

    3. 混淆打包配置

如果您的项目使用了Proguard混淆打包,为了避免SDK被二次混淆导致无法正常使用SDK,请务必在 proguard-project.txt中添加以下代码:

1
2
3
4
5
-libraryjars libs/GizWifiSDK.jar
-dontwarn com.gizwits.**
-keep class com.gizwits.**{
*;
}

并在project.properties中指向Android混淆文件:

1
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

SDK流程详解

1. 初始化部分

1.1. 初始化部分流程图

Alt text

1.2. 注册SDK通用监听器

注册SDK通用监听器是为了能让APP收到来自GizWifiSDK类的响应事件,包含了注册、登录、配置设备、绑定设备等回调接口。该监听器是SDK使用中十分重要的一个监听器,与GizWifiSDK类相关的操作都会在这里会回调。如果没有正确注册通用监听器,将无法正常使用SDK。注册监听时,APP可以根据自己的需求实现回调接口。建议两种设置方式:

1)在每一个使用到的Activity中都实例化一次监听器并注册一次,且只实现需要的回调接口。该种方式比较灵活,可在service中使用。但要注意必须每次打开activity都监听一次, 且无法多个Activity同时收到回调。

【示例代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 实例化监听器
GizWifiSDKListener mListener = new GizWifiSDKListener() {

// 实现手机号注册用户回调
Override
public void didRegisterUser(GizWifiErrorCode result, String uid, String token){
if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
// 注册成功,处理注册成功的逻辑
} else {
// 注册失败,处理注册失败的逻辑
}
}
};

public void onCreate() {
super.onCreate();

// 注册监听器
GizWifiSDK.sharedInstance().setListener(mListener);
// 调用SDK的手机号注册接口
GizWifiSDK.sharedInstance().registerUser("HelloGizwits", "12345678");
}

2)在一个基类中实例化一次监听器,并把回调抛出,子类继承基类,这就不需要每个子类都实例化一次监听器。该种方式通过继承的方式,可以多个Activity都收到回调。但该种方式无法在Service中使用。如无特别说明,文档中的范例都是使用该方法注册监听器。

【示例代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// 创建基类,在基类中实例化和注册监听器
public class BaseActivity extends Activity {
private GizWifiSDKListener mListener = new GizWifiSDKListener() {
Override
public void didRegisterUser(GizWifiErrorCode result, String uid, String token) {
BaseActivity.this.didRegisterUser(result, uid, token);
}
};

public void didRegisterUser(GizWifiErrorCode result, String uid, String token)
{
// 实现逻辑
}

Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

//每次启动activity都要注册一次sdk监听器,保证sdk状态能正确回调
GizWifiSDK.sharedInstance().setListener(mListener);
}
}

//子类继承基类,实现基类的回调接口。
public class TestActivity extends BaseActivity {
protected void onCreate(android.os.Bundle savedInstanceState) {
//调用父类方法
super.onCreate(savedInstanceState);
//调用用户注册方法
GizWifiSDK.sharedInstance().registerUser ("your_phone_number", "your_ password", “your_verify_code”, GizUserAccountType.GizUserPhone);
}

@Override
public void didRegisterUser(GizWifiErrorCode result, String uid, String token) {
if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
// 注册成功
} else {
// 注册失败
}
}
}

1.3 初始化 sdk

SDK启动前,任何功能都是无法正常使用的。SDK启动时,会进行SDK初始化,并自动发现当前局域网设备。SDK将通过通用监听,上报已发现的设备以及相应的事件。APP可以先设置SDK的通用监听,再启动SDK,以便处理这些事件通知。

SDK启动时需要指定应用程序的AppID,开发者需要先在机智云网站上为自己的APP申请一个AppID,请在应用的Application或者第一个启动的Activity的onCreate中调用该方法指定应用的APPID。该方法只需要调用一次。

SDK的日志可以帮助开发者发现APP运行时发生的问题,SDK默认将所有日志信息输出到调试终端和日志文件中。如果手机有SD卡,则日志文件会保存在SD卡上,如果没有SD卡,就只保存在应用程序路径下。SD卡上的日志文件目录为手机SD卡路径下的GizWifiSDK/app_package_name/GizSDKLog。APP如果不希望在调试终端输出日志,可以通过日志级别设置接口,把日志输出级别修改为GizLogPrintNone。

【示例代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public void onCreate() {
super.onCreate();
GizWifiSDK.sharedInstance().setListener(mListener);
GizWifiSDK.sharedInstance().startWithAppID(getApplicationContext(), "your_app_id");

GizWifiSDKListener mListener = new GizWifiSDKListener() {
@Override
public void didNotifyEvent(GizEventType eventType, Object eventSource, GizWifiErrorCode eventID, String eventMessage) {
if (eventType == GizEventType.GizEventSDK) {
// SDK的事件通知
Log.i("GizWifiSDK", "SDK event happened: " + eventID + ", " + eventMessage);
} else if (eventType == GizEventType.GizEventDevice) {
// 设备连接断开时可能产生的通知
GizWifiDevice mDevice = (GizWifiDevice)eventSource;
Log.i("GizWifiSDK", "device mac: " + mDevice.getMacAddress() + " disconnect caused by eventID: " + eventID + ", eventMessage: " + eventMessage);
} else if (eventType == GizEventType.GizEventM2MService) {
// M2M服务返回的异常通知
Log.i("GizWifiSDK", "M2M domain " + (String)eventSource + " exception happened, eventID: " + eventID + ", eventMessage: " + eventMessage);
} else if (eventType == GizEventType.GizEventToken) {
// token失效通知
Log.i("GizWifiSDK", "token " + (String)eventSource + " expired: " + eventMessage);
}
}
};

2. 用户部分

机智云的用户系统包含了用户的注册、登录、重置密码、修改个人信息等功能,机智云以APPID区分用户系统,不同APPID的用户系统相互独立。更换APPID后,需要重新注册用户。

以下流程中涉及到的监听器注册方法是用子类继承基类的方式实现的。

2.1. 用户部分主要流程图

Alt text

用户的注册方式有多种,比如手机号、普通用户名、邮箱等,APP可以根据需要采取不同的方式。其他流程比如登录、密码修改、个人信息修改等部分,请直接阅读下面的流程文档。

2.2. 用户注册

机智云提供三种用户注册方式:手机注册、普通用户注册、邮箱注册。

2.2.1. 注册手机用户

通过手机注册账号,需要一个有效的手机号。注册时需要两步操作:获取短信验证码、用短信验证码注册用户。

第一步:APP获取短信验证码时,SDK向云端发送短信验证码请求,如果请求成功,云端会给手机发送短信验证码。

【示例代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
GizWifiSDK.sharedInstance().setListener(mListener);
GizWifiSDK.sharedInstance().requestSendPhoneSMSCode ("your_app_secret", "your_phone_number");

// 实现回调
GizWifiSDKListener mListener = new GizWifiSDKListener() {
@Override
public void didRequestSendPhoneSMSCode(GizWifiErrorCode result, String token) {
if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
// 请求成功
} else {
// 请求失败
}
}
}

第二步:用短信验证码注册时,APP把手机收到的短信验证码传给SDK,填上手机号和密码就可以注册了。

【示例代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
GizWifiSDK.sharedInstance().setListener(mListener);
GizWifiSDK.sharedInstance().registerUser("your_phone_number", "your_password", "your_verify_code", GizUserAccountType.GizUserPhone);

// 实现回调
GizWifiSDKListener mListener = new GizWifiSDKListener() {
@Override
public void didRegisterUser(GizWifiErrorCode result, String uid, String token) {
if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
// 注册成功
} else {
// 注册失败
}
}
}

2.2.2. 注册普通用户

注册普通用户,使用用户名、密码即可创建一个账号。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
【示例代码】
GizWifiSDK.sharedInstance().setListener(mListener);
GizWifiSDK.sharedInstance().registerUser("your_user_name", "your_password", null, GizUserAccountType.GizUserNormal);

// 实现回调
GizWifiSDKListener mListener = new GizWifiSDKListener() {
@Override
public void didRegisterUser(GizWifiErrorCode result, String uid, String token) {
if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
// 注册成功
} else {
// 注册失败
}
}
}

2.2.3. 注册邮箱用户

通过有效的电子邮箱地址,注册一个账号。注册成功后,云端会给指定邮箱发送注册成功的邮件。

【示例代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
GizWifiSDK.sharedInstance().setListener(mListener);
GizWifiSDK.sharedInstance().registerUser("your_email_address", "your_password", null, GizUserAccountType.GizUserEmail);

// 实现回调
GizWifiSDKListener mListener = new GizWifiSDKListener() {
@Override
public void didRegisterUser(GizWifiErrorCode result, String uid, String token) {
if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
// 注册成功
} else {
// 注册失败
}
}
}

2.3. 用户登录

机智云提供三种用户登录方式:实名登录、匿名登录、第三方账号登录。实名登录适用于设计了登录界面,必须使用用户名密码注册登录以后才能使用的APP。匿名登录适用于没有设计登录界面,由后台自动生成用户账号的APP。登录后获取到的token有效期为7天。

2.3.1. 实名登录

实名用户登录时,用户名可以是注册过的手机号、邮箱、普通用户名。登录账号要先注册好,如果更换了AppID,登录账号需要重新注册。

【示例代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
GizWifiSDK.sharedInstance().setListener(mListener);
GizWifiSDK.sharedInstance().userLogin("your_user_name", "your_password");

// 实现回调
GizWifiSDKListener mListener = new GizWifiSDKListener() {
@Override
public void didUserLogin(GizWifiErrorCode result, String uid, String token) {
if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
// 登录成功
} else {
// 登录失败
}
}
}

2.3.2. 匿名登录

用户每次匿名登录时,获取到的uid是相同的。Android SDK使用Android ID生成登录账号。每个Android系统都有一个独立的Android ID,系统刷机后将改变。因此,系统刷机后匿名登录的用户信息将无法保留。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
【示例代码】
GizWifiSDK.sharedInstance().setListener(mListener);
GizWifiSDK.sharedInstance().userLoginAnonymous();

// 实现回调
GizWifiSDKListener mListener = new GizWifiSDKListener() {
@Override
public void didUserLogin(GizWifiErrorCode result, String uid, String token) {
if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
// 登录成功
} else {
// 登录失败
}
}
}

2.3.3. 第三方账号登录

目前支持的第三方账号有百度、新浪、腾讯。用户可以使用这三者的API获取到uid和token登录机智云,使用第三方账号登录时无需在机智云上注册,可直接登录。

开发者可通过新浪、百度或腾讯api获取uid和token, 具体方法请参考各第三方平台的开发者文档。

【示例代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 以新浪账号为例
GizWifiSDK.sharedInstance().setListener(mListener);
GizWifiSDK.sharedInstance().loginWithThirdAccount(GizThirdAccountType.GizThirdSINA, "your_third_uid", "your_third_token");

// 实现回调
GizWifiSDKListener mListener = new GizWifiSDKListener() {
@Override
public void didUserLogin(GizWifiErrorCode result, String uid, String token) {
if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
// 登录成功
} else {
// 登录失败
}
}
}

2.4. 重置密码

如果忘记了用户密码,可以通过手机验证码或邮箱设置新的密码。SDK支持手机号重置密码和邮箱重置密码两种,手机号重置需要接收验证码,邮箱重置需要进⼊邮箱,根据链接提示进行重置。

2.4.1. 手机号重置密码

手机号重置密码时,需要先获取短信验证码再重置。获取短信验证码方式与手机注册时相同。

第一步:获取短信验证码

【示例代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
GizWifiSDK.sharedInstance().setListener(mListener);
GizWifiSDK.sharedInstance().requestSendPhoneSMSCode("your_app_secret", "your_phone_number");

GizWifiSDKListener mListener = new GizWifiSDKListener() {
@Override
public void didRequestSendPhoneSMSCode(GizWifiErrorCode result, String token) {
if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
// 请求成功
} else {
// 请求失败
}
}
}

第二步:用短信验证码重置密码

【示例代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
GizWifiSDK.sharedInstance().setListener(mListener);
GizWifiSDK.sharedInstance().resetPassword("your_phone_number", "your_verify_code", "your_new_password", GizUserAccountType.GizUserPhone);

// 实现回调
GizWifiSDKListener mListener = new GizWifiSDKListener() {
@Override
public void didChangeUserPassword(GizWifiErrorCode result) {
if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
// 修改成功
} else {
// 修改失败
}
}
}

2.4.2. 邮箱重置密码

邮箱重置密码时,云端会给指定邮箱发送安全链接。用户需要到邮箱中查收邮件,并按邮件指示执行重置操作。重置密码邮件有可能进入用户的邮箱的垃圾箱中,需提醒用户。

邮件发送成功回调与密码修改成功回调一致,因此需要注意在回调的时候区分。

【示例代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
GizWifiSDK.sharedInstance().setListener(mListener);
GizWifiSDK.sharedInstance().resetPassword("your_email_address", null, "your_new_password", GizUserAccountType.GizUserEmail);

// 实现回调
GizWifiSDKListener mListener = new GizWifiSDKListener() {
@Override
public void didChangeUserPassword(GizWifiErrorCode result) {
if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
//重置密码邮件发送成功,提示用户查收
} else {
//重置密码邮件发送失败,弹出错误信息
}
}
}

2.5. 修改密码

用户登录后可以修改密码。

【示例代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
GizWifiSDK.sharedInstance().setListener(mListener);
GizWifiSDK.sharedInstance().changeUserPassword("your_token", "your_old_password", "your_new_password");

// 实现回调
GizWifiSDKListener mListener = new GizWifiSDKListener() {
@Override
public void didChangeUserPassword(GizWifiErrorCode result) {
if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
// 修改成功
} else {
// 修改失败
}
}
}

2.6. 匿名用户转换

匿名注册的用户可以转换为普通用户或者手机用户,转换后匿名用户的信息会转移到实名用户下,原匿名账号失效。但普通用户和手机用户必须是还未注册过的,已注册的用户名是无法转换的。

2.6.1. 匿名用户转普通用户

转普通用户时,填入待转换的用户名、密码,以及登录的token就可以了。

【示例代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 匿名转普通用户
GizWifiSDK.sharedInstance().setListener(mListener);
GizWifiSDK.sharedInstance().transAnonymousUser("your_token", "your_user_name", "your_password", null, GizUserAccountType.GizUserNormal);

// 实现回调
GizWifiSDKListener mListener = new GizWifiSDKListener() {
@Override
public void didTransAnonymousUser(GizWifiErrorCode result) {
if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
// 转换成功
} else {
// 转换失败
}
}
}

2.6.2. 匿名用户转手机用户

转手机用户时,需要填入待转换的手机号、密码、短信验证码,登录的token。获取短信验证码的过程与手机注册时一样。

【示例代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 匿名转手机用户
GizWifiSDK.sharedInstance().setListener(mListener);
GizWifiSDK.sharedInstance().transAnonymousUser("your_token", "your_phone_number", "your_password", "your_verify_code", GizUserAccountType. GizUserPhone);

// 实现回调
GizWifiSDKListener mListener = new GizWifiSDKListener() {
@Override
public void didTransAnonymousUser(GizWifiErrorCode result) {
if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
// 转换成功
} else {
// 转换失败
}
}
}

2.7. 修改用户信息

实名用户不支持修改普通用户名,可以修改邮箱、手机号,可以补充个人信息。实名用户必须登录后才能修改这些信息,并且待修改的邮箱或手机号必须是已经注册过的。

实名用户修改邮箱或手机号成功后,可以使用修改后的邮箱或手机号登录。登录后获得的绑定设备列表与原实名用户一致。

修改邮箱或手机号时,可以同时补充个人信息。不想修改个人信息时,对应参数可以传null。同时修改个人信息时,如果邮箱或用户名修改成功而个人信息修改失败,回调会返回成功并在errorMessage中提示个人信息修改失败的原因。

2.7.1. 修改用户邮箱

只修改用户邮箱时,个人信息的参数传null,用户类型可以指定为邮箱用户。以下为修改用户邮箱的示例代码。

【示例代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
GizWifiSDK.sharedInstance().setListener(mListener);
GizWifiSDK.sharedInstan