Android记录22-关于开发中账号绑定的逻辑处理

2024-06-22 10:36

本文主要是介绍Android记录22-关于开发中账号绑定的逻辑处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

有绑定的状态,自然也有取消绑定的状态:

这里的取消绑定只是简单改变应用内的一个状态罢了,并不会跟我们的服务端交互,也不会影响我们的账号登录的状态。

说了这么多,也没看见代码,你们会不会打我,尼玛,打人不打脸,打脸伤自尊,好坏好坏的。

下面贴使用友盟做的账号绑定:

// 整个平台的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”)

.toString();

sns_loginname = info.get(“screen_name”)

.toString();

}

LogUtils.loge(“weixin”, sns + “,” + sns_id + “,”

  • sns_loginname);

HttpRequestHelper.getInstance().getUserBySns(

SettingActivity.this,

sns,

sns_id,

sns_avatar,

sns_loginname,

new GetUserBySnsResponse(platform, sns,

sns_id, sns_avatar, sns_loginname));

}

}

});

}

解除绑定方法

/**

  • 注销本次登陆

  • @param platform

*/

private void logout(final SHARE_MEDIA platform) {

mController.deleteOauth(SettingActivity.this, platform,

new SocializeClientListener() {

@Override

public void onStart() {

}

@Override

public void onComplete(int status, SocializeEntity entity) {

String showText = “解除” + platform.toString() + “平台授权成功”;

if (status != StatusCode.ST_CODE_SUCCESSED) {

showText = “解除” + platform.toString() + “平台授权失败[”

  • status + “]”;

} else {

if (platform == SHARE_MEDIA.SINA) {

sinaBindingText

.setText(getString(R.string.setting_unbind));

StorageUtils.setShareValue(

SettingActivity.this,

StorageUtils.KEY_SINA_BINDING, false);

} else if (platform == SHARE_MEDIA.QQ) {

qqBindingText

.setText(getString(R.string.setting_unbind));

StorageUtils.setShareValue(

SettingActivity.this,

StorageUtils.KEY_QQ_BINDING, false);

}

}

Toast.makeText(SettingActivity.this, showText,

Toast.LENGTH_SHORT).show();

}

});

}

取消对话框

最后

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

[外链图片转存中…(img-JTm6u2E7-1719020954362)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

资料⬅专栏获取
geUtils.KEY_QQ_BINDING, false);

}

}

Toast.makeText(SettingActivity.this, showText,

Toast.LENGTH_SHORT).show();

}

});

}

取消对话框

最后

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

[外链图片转存中…(img-JTm6u2E7-1719020954362)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

资料⬅专栏获取

这篇关于Android记录22-关于开发中账号绑定的逻辑处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1084043

相关文章

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局