账号绑定与第三方登录有什么不同?
主要是逻辑方面的区别,第三方登录其实就是让用户享受一键登录的快感,而不需要记住任何账号和密码,这种用户体
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
验也是为了满足用户容易遗忘在不同平台所使用的账号和密码,避免了繁杂吃力不讨好的注册流程,也更方便把社交平台的用户转化为自身应用内用户。账号绑定前面已经说了,就是让用户更方便得进行分享。
如何来处理账号绑定的相关逻辑?
这里说明一点,账号绑定跟第三方登录都是要走授权流程的,所以说它们背后的逻辑是一样的,只是它在我们的应用逻辑不一样。
两种情况:
1.账号未登录,不显示绑定状态
2.账号登录,显示账号绑定状态
用户可以选择使用第三方登录,登录成功之后,就已经绑定了其中一个平台。
我们可以看到,QQ账号已经绑定成功了。这里有一点忘记说了,怎样才算绑定账号成功?
无论是第三方登录还是账号绑定都有一个生成账号的过程,而这个过程是需要跟服务端进行交互的,通过我们授权获取到的第三方平台的数据来生成我们应用内的账号,如果生成成功,那就意味着绑定成功了。
有绑定的状态,自然也有取消绑定的状态:
这里的取消绑定只是简单改变应用内的一个状态罢了,并不会跟我们的服务端交互,也不会影响我们的账号登录的状态。
说了这么多,也没看见代码,你们会不会打我,尼玛,打人不打脸,打脸伤自尊,好坏好坏的。
下面贴使用友盟做的账号绑定:
// 整个平台的Controller,负责管理整个SDK的配置、操作等处理
private UMSocialService mController = UMServiceFactory
.getUMSocialService(AppConstants.DESCRIPTOR);
/**
- 配置分享平台参数
*/
private void configPlatforms() {
// 添加新浪sso授权
mController.getConfig().setSsoHandler(new SinaSsoHandler());
// mController.getConfig().setSinaCallbackUrl(“http://sns.whalecloud.com/sina2/callback”);
// 添加QQ、QZone平台
addQQPlatform();
}
private void addQQPlatform() {
String appId = AppConstants.QQZONE_APPID;
String appKey = AppConstants.QQZONE_APPKEY;
// 添加QQ支持, 并且设置QQ分享内容的target url
UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(SettingActivity.this,
appId, appKey);
qqSsoHandler.setTargetUrl(“http://www.umeng.com”);
qqSsoHandler.addToSocialSDK();
}
在Onclick方法中处理点击事件:
登录方法
/**
-
授权。如果授权成功,则获取用户信息
-
@param platform
*/
private void login(final SHARE_MEDIA platform) {
mController.doOauthVerify(SettingActivity.this, platform,
new UMAuthListener() {
@Override
public void onStart(SHARE_MEDIA platform) {
LogUtils.logi(TAG, “onStart------”
- Thread.currentThread().getId());
ToastUtils.showShort(SettingActivity.this,
getString(R.string.oauth_begin));
}
@Override
public void onError(SocializeException e,
SHARE_MEDIA platform) {
LogUtils.logi(TAG, “onError------”
- Thread.currentThread().getId());
ToastUtils.showShort(SettingActivity.this,
getString(R.string.oauth_fail));
}
@Override
public void onComplete(Bundle value, SHARE_MEDIA platform) {
LogUtils.logi(TAG, “onComplete------”
- Thread.currentThread().getId());
// 获取uid
String uid = value.getString(“uid”);
if (value != null && !TextUtils.isEmpty(uid)) {
// uid不为空,获取用户信息
getUserInfo(platform);
} else {
ToastUtils.showShort(SettingActivity.this,
getString(R.string.oauth_fail));
}
}
@Override
public void onCancel(SHARE_MEDIA platform) {
LogUtils.logi(TAG, “onCancel------”
- Thread.currentThread().getId());
ToastUtils.showShort(SettingActivity.this,
getString(R.string.oauth_cancle));
}
});
}
**
获取平台信息**
/**
-
获取用户信息
-
@param platform
*/
private void getUserInfo(final SHARE_MEDIA platform) {
mController.getPlatformInfo(SettingActivity.this, platform,
new UMDataListener() {
@Override
public void onStart() {
// 开始获取
showProgressDialog();
}
@Override
public void onComplete(int status, Map<String, Object> info) {
LogUtils.logi(“third login”, info.toString());
String sns_id = “”;
String sns_avatar = “”;
String sns_loginname = “”;
if (info != null) {
String sns = “”;
if (platform == SHARE_MEDIA.SINA) { // 新浪微博
sns = “sina”;
sns_id = info.get(“uid”).toString();
sns_avatar = info.get(“profile_image_url”)
.toString();
sns_loginname = info.get(“screen_name”)
.toString();
} else if (platform == SHARE_MEDIA.QQ) { // QQ
sns = “qq”;
sns_id = info.get(“uid”).toString();
sns_avatar = info.get(“profile_image_url”)
.toString();
sns_loginname = info.get(“screen_name”)
.toString();
} else if (platform == SHARE_MEDIA.WEIXIN) { // 微信
sns = “wechat”;
sns_id = info.get(“openid”).toString();
sns_avatar = info.get(“headimgurl”).toString();
sns_loginname = info.get(“nickname”).toString();
} else if (platform == SHARE_MEDIA.DOUBAN) { // 豆瓣
sns = “douban”;
sns_id = info.get(“uid”).toString();
sns_avatar = info.get(“profile_image_url”)