教程:安卓用户账号注册和登录实践

更新时间:2023-04-13 09:36:18下载pdf

涂鸦 IoT App SDK 安卓版提供了即全面又灵活的 IoT App 用户的管理方式。本教程涵盖了用户登录、注册、退出、密码找回、用户信息修改等流程,提供了详细的 Java 示例代码,供您参考。

通过学习本教程,您可以了解到如何:

  • 使用手机号注册后登录涂鸦IoT平台,并绑定自己的邮箱账号。
  • 使用邮箱账号注册后登录涂鸦IoT平台。
  • 在 IoT 平台配置并使用微信或Google账号登录涂鸦IoT平台。
  • 查看并修改用户账号信息,如密码和昵称等。

前往 App 工作台 点击查看 GitHub Sample

环境要求

在您开始本教程前,请先确保您已经 :

  1. 在涂鸦智能 IoT 平台注册账号并创建App,获取 SDK 的 AppKey,AppSecret。参考 准备工作

  2. 使用 Android Studio 将涂鸦安卓 IoT App SDK集成到您的项目中 。参考快速集成

    本教程在 macOS 上使用 Android Studio(4.1.2)集成涂鸦 IoT App SDK。针对 SDK 版本 v3.26.5,目前 SDK 支持的 minSdkVersion 最低为 19

效果展示

学习完本教程,您可以创建一个类似以下安卓 App 的 Demo。

教程:安卓用户账号注册和登录实践 教程:安卓用户账号注册和登录实践

背景信息

无论是使用手机号码或邮箱地址注册的账号,您需要提供 countryCode 参数(国家区号),用于就近选择涂鸦 IoT 的可用区。如中国大陆为86,美国为1。各个可用区的数据是相互独立的,因此在 中国大陆(86) 注册的账号,在 美国(1) 无法使用(提示用户不存在)。可用区相关概念请参考 云服务介绍

在该模块中,您将频繁地调用对象 User。它存储了当前用户的所有信息,通过 ThingHomeSdk.getUserInstance() 获取到IThingUser,它提供了相关的登录注册方法。详情请参考 User

手机号码和邮箱注册和登录

查询验证码服务可用地区

  • 思路:出于对用户信息的隐私安全考虑,涂鸦对验证码的机制做了优化和账号限制。只有当您开通了对应地区的验证码发送服务,才可以在地区内发送验证码。

  • 示例:

    ThingHomeSdk.getUserInstance().getWhiteListWhoCanSendMobileCodeSuccess(new IWhiteListCallback() {
    			@Override
    			public void onSuccess(WhiteList whiteList) {
    				Toast.makeText(mContext, "Whitelist Success:" + whiteList.getCountryCodes(), Toast.LENGTH_SHORT).show();
    			}
    
    			@Override
    			public void onError(String code, String error) {
    				Toast.makeText(mContext, "code: " + code + "error:" + error, Toast.LENGTH_SHORT).show();
    			}
    		});
    
  • 返回:返回值 whiteList 表示一个或多个国家或地区,以 , 隔开的字符串,例如 8601。可用区编号列表,请参考 涂鸦云平台介绍

  • 开通:目前,中国大陆默认开通验证码发送服务,若您希望自己的应用发布在其他国家或地区,则必须提前查询验证码开通的地区,若有需求,请联系您的涂鸦客户经理或 提交工单 开通该服务。

获取手机号码注册账号的验证码

  • 思路:手机号注册与邮箱注册流程类似,用户必须先获取验证码。

  • 接口:在 IoT App SDK 最新版本中,涂鸦将发送验证码的接口重新整合。现在,无论是手机或是邮箱,您都可以使用统一的获取验证码接口在登录、注册及后续密码重置操作中获取相应的验证码。

    ThingHomeSdk.getUserInstance().sendVerifyCodeWithUserName(String userName, String region, String countryCode, int type, IResultCallback callback);
    

    参数说明

    参数 说明
    userName 手机号码/邮箱账号
    region 区域,默认填写:“” 即可
    countryCode 手机区号:如 “86”
    type 发送验证码类型:1:注册 2:登录 3:重置密码
    callback 回调
  • 示例:

    ThingHomeSdk.getUserInstance().sendVerifyCodeWithUserName("xxx6/7825***66@123.com", "", "86", 1/2/3, new IResultCallback() {
    			@Override
    			public void onError(String code, String error) {
    				Toast.makeText(mContext, "code: " + code + "error:" + error, Toast.LENGTH_SHORT).show();
    			}
    
    			@Override
    			public void onSuccess() {
    				Toast.makeText(mContext, "Get code success:", Toast.LENGTH_SHORT).show();
    			}
    		});
    

使用手机号码注册账号

  • 思路:使用手机号码注册账号前,您需要调用获取验证码接口,传入相应 type。然后调用号码注册接口,需要上传国家码、手机号码、密码以及获取到的验证码。

  • 示例:

    ThingHomeSdk.getUserInstance().registerAccountWithPhone("86","13666666666","123456","124332", new IRegisterCallback() {
    	@Override
    	public void onSuccess(User user) {
    		Toast.makeText(mContext, "Register success", Toast.LENGTH_SHORT).show();
    	}
    	@Override
    	public void onError(String code, String error) {
    		Toast.makeText(mContext, "code: " + code + "error:" + error, Toast.LENGTH_SHORT).show();
    	}
    });
    

使用手机号码登录账号

在注册成功后,您就可以使用国家码、手机号和密码登录涂鸦IoT平台系统 。示例代码如下:

  • 思路:使用手机号码注册账号成功后,用户就可以使用手机号登录到平台系统。

  • 示例:

    ThingHomeSdk.getUserInstance().loginWithPhonePassword("86", "13666666666", "123456", new ILoginCallback() {
    	@Override
    	public void onSuccess(User user) {
    		Toast.makeText(mContext, "Login success:" +ThingHomeSdk.getUserInstance().getUser().getUsername(), Toast.LENGTH_SHORT).show();
    	}
    
    	@Override
    	public void onError(String code, String error) {
    		Toast.makeText(mContext, "code: " + code + "error:" + error, Toast.LENGTH_SHORT).show();
    	}
    });
    

账号绑定用户邮箱地址

  • 思路:当用户使用手机号登录后,还可以绑定用户的邮箱账号。成功后,用户就可以同时使用邮箱登录账号。同样的,您需要首先调用 sendBindVerifyCodeWithEmail 获取验证码,请注意,绑定邮箱的验证码为单独接口

  • 获取验证码 示例:

    ThingHomeSdk.getUserInstance().sendBindVerifyCodeWithEmail("86","123456@123.com", new IResultCallback(){
    
    			@Override
    			public void onError(String code, String error) {
    
    			}
    
    			@Override
    			public void onSuccess() {
    				Toast.makeText(mContext, "Send code success:", Toast.LENGTH_SHORT).show();
    			}
    		});
    
  • 绑定邮箱 示例:

    ThingHomeSdk.getUserInstance().bindEmail("86", "123456@123.com","123456", ThingHomeSdk.getUserInstance().getUser().getSid(), new IResultCallback() {
    			@Override
    			public void onError(String code, String error) {
    
    			}
    
    			@Override
    			public void onSuccess() {
    				Toast.makeText(mContext, "Bind success:", Toast.LENGTH_SHORT).show();
    			}
    		});
    

使用用户邮箱注册账号

  • 思路:与手机号注册类似,实现邮箱注册前,您需要调用获取验证码接口,然后调用邮箱注册接口,需要上传国家码、邮箱地址、密码以及获取到的验证码。详情请参考 邮箱注册

  • 示例:

    ThingHomeSdk.getUserInstance().registerAccountWithEmail("86", "123456@123.com","123456","5723", new IRegisterCallback() {
    	@Override
    	public void onSuccess(User user) {
    		Toast.makeText(mContext, "Register success:", Toast.LENGTH_SHORT).show();
    	}
    
    	@Override
    	public void onError(String code, String error) {
    		Toast.makeText(mContext, "code: " + code + "error:" + error, Toast.LENGTH_SHORT).show();
    	}
    });
    

使用邮箱登录账号

  • 思路:当用户使用邮箱注册账号成功后,就可以使用该邮箱登录到 App。

  • 示例:

    ThingHomeSdk.getUserInstance().loginWithEmail("86", "123456@123.com", "123123", new ILoginCallback() {
    	@Override
    	public void onSuccess(User user) {
    		Toast.makeText(mContext, "Login success:").show();
    	}
    
    	@Override
    	public void onError(String code, String error) {
    		Toast.makeText(mContext, "code: " + code + "error:" + error, Toast.LENGTH_SHORT).show();
    	}
    });
    

通过第三方平台账号登录

涂鸦 IoT App SDK 为您提供了常用的第三方登录接口。如微信,QQ,谷歌,Facebook 等。本教程以微信和谷歌登录为例进行说明。

通过腾讯微信登录

使用微信登录之前,您需要在微信开发者平台上按照提示注册账号,并按照微信开放平台的提示完成开发者资质认证。参考微信登录申请流程

您还需要将获得的App ID 和App Secret 填入 涂鸦 IoT 平台,详情见下图:

教程:安卓用户账号注册和登录实践

完成后您就可以调用微信登录接口完成微信登录。示例代码如下:

ThingHomeSdk.getUserInstance().loginByWechat("86",
		"",
		new ILoginCallback() {
	@Override
	public void onSuccess(User user) {

	}

	@Override
	public void onError(String code, String error) {

	}
});

通过谷歌账号登录

与微信登录类似,您需要登录 Google 开发者平台配置应用信息并将产生的 Google 身份平台授权的 Client ID 填入 涂鸦 IoT 平台。申请的具体流程可参考 申请 Google 登录

教程:安卓用户账号注册和登录实践

接下来,您就可以调用 谷歌登录 接口完成谷歌登录。

ThingHomeSdk.getUserInstance().thirdLogin(countryNumberCode,token,"gg","{\"pubVersion\":1}", new ILoginCallback() {
	@Override
	public void onSuccess(User user) {

	}
	@Override
	public void onError(String code, String error) {

	}
});

修改用户账号信息

登录成功后您可以修改用户信息如昵称,密码,地区等。本教程演示如何修改用户昵称和登录密码。更多修改信息的接口调用可参考 用户信息修改

修改用户昵称

通过手机号和邮箱注册的账号来进行登录,可以通过调用修改昵称的接口来设置账号昵称。第三方登录,如微信登录默认昵称就是微信的用户名,不支持修改昵称。示例代码如下:

ThingHomeSdk.getUserInstance().reRickName(nickName,
	new IReNickNameCallback() {
		@Override
		public void onSuccess() {
		}
		@Override
		public void onError(String code, String error) {

		}
});

修改账号密码

用户在登录后或忘记密码时,您可以通过调用修改密码接口来重设密码。过程与注册类似,您需要首先调用发送验证码接口。注意 ,此时参数type所传值为3成功获取验证码后可以根据账号调用不同接口来实现修改密码。

通过手机号码修改密码示例

ThingHomeSdk.getUserInstance().resetPhonePassword("86", "13555555555", "123456", "123123", new IResetPasswordCallback(){
	@Override
	public void onSuccess() {
		Toast.makeText(mContext, "onSuccess", Toast.LENGTH_SHORT).show();
	}

	@Override
	public void onError(String code, String error) {
		Toast.makeText(mContext, "code: " + code + "error:" + error, Toast.LENGTH_SHORT).show();
	}
});

修改邮箱地址示例

ThingHomeSdk.getUserInstance().resetEmailPassword("86", "123456@123.com", "123123""a12345", new IResetPasswordCallback() {
	@Override
	public void onSuccess() {
		Toast.makeText(mContext, "onSuccess", Toast.LENGTH_SHORT).show();
	}
	@Override
	public void onError(String code, String error) {
		Toast.makeText(mContext, "code: " + code + "error:" + error, Toast.LENGTH_SHORT).show();
	}
});

退出登录

  • 思路:账号退出登录,或切换称其他账号。

  • 接口:退出登录

  • 示例:

    ThingHomeSdk.getUserInstance().touristLogOut(new ILogoutCallback() {
    	@Override
    	public void onSuccess() {
    
    	}
    	@Override
    	public void onError(String code, String error) {
    
    	}
    });
    

注销用户账号

  • 接口:注销账号

  • 示例:

    ThingHomeSdk.getUserInstance().cancelAccount(new IResultCallback() {
    	@Override
    	public void onError(String code, String error) {
    
    	}
    	@Override
    	public void onSuccess() {
    
    	}
    });