Android集成微信登录
这篇文章给同学们图文详解Android集成微信登录的步骤,通过文章整理的内容,大家只需要几行代码就可以实现微信登录的功能。
一、首先在Application的onCreate中写:
public static IWXAPI sApi;
@Override
public void onCreate() {
super.onCreate();
sApi = WXEntryActivity.initWeiXin(this, "**********");
}
二、在需要登录的地方添加:
//微信登录,跳转至微信授权页面
WXEntryActivity.loginWeixin(mActivitySelf, MyApplication.sApi);
三、下面对具体的集成步骤做详细的描述。
集成步骤:
1、在开放平台注册创建应用,申请登录权限
2、下载sdk或配置依赖,拷贝相关文件到项目工程目录
3、全局初始化微信组件
4、请求授权登录,获取code
5、通过code获取授权口令access_token
6、使用access_token获取用户信息
1. 在开放平台注册创建应用,申请登录权限
需要注意的是:应用签名的部分
需要注意的事关于应用签名这里,可以查看此博客进行获取"http://www.tangchaowang.com/kexuezhishi/3874.html"
注册成功获取到key后配置到MyApplication中,在app目录的building.gradle中添加依赖
" api ‘com.tencent.mm.opensdk:wechat-sdk-android:6.8.0’"
并在包中创建wxapi文件夹,在文件夹中创建WXEntryActivity页面,如果wxapi这个文件夹放的位置不对,将无法登录,微信sdk无法找到登录的Activity授权功能。
接着在AndroidManifest.xml文件中添加:
<activity
android:name=".wxapi.WXEntryActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:taskAffinity="包名" />
3. 全局初始化微信组件
全局初始化微信组件,当然是Application的onCreate里(当然Activity的onCreate也是可以的,为了全局使用微信api对象方便操作):
public static IWXAPI sApi;
public void onCreate() {
super.onCreate();
sApi = WXEntryActivity.initWeiXin(this, "注册后获得的key");
}
4. 请求授权登录,获取code
为了统一业务的单一原则我把微信相关的都统一封装到了wxapi包下和WXEntryActivity中:
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
private IWXAPI api;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.wx_result);
api = MyApplication.sApi;
api.handleIntent(getIntent(), this);
EventBus.getDefault().register(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
//解除注册
EventBus.getDefault().unregister(this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
/**
* 微信组件注册初始化
*
* @param context 上下文
* @param weixin_app_id appid
* @return 微信组件api对象
*/
public static IWXAPI initWeiXin(Context context, @NonNull String weixin_app_id) {
if (TextUtils.isEmpty(weixin_app_id)) {
//Toast.makeText(context.getApplicationContext(), "app_id 不能为空", Toast.LENGTH_SHORT).show();
}
IWXAPI api = WXAPIFactory.createWXAPI(context, weixin_app_id, true);
api.registerApp(weixin_app_id);
return api;
}
/**
* 登录微信
*
* @param api 微信服务api
*/
public static void loginWeixin(Context context, IWXAPI api) {
// 判断是否安装了微信客户端
if (!api.isWXAppInstalled()) {
Toast.makeText(context.getApplicationContext(), "您还未安装微信客户端!", Toast.LENGTH_SHORT).show();
return;
}
// 发送授权登录信息,来获取code
SendAuth.Req req = new SendAuth.Req();
// 应用的作用域,获取个人信息
req.scope = "snsapi_userinfo";
/**
* 用于保持请求和回调的状态,授权请求后原样带回给第三方
* 为了防止csrf攻击(跨站请求伪造攻击),后期改为随机数加session来校验
*/
req.state = "app_wechat";
api.sendReq(req);
}
@Override
public void onResp(BaseResp resp) {
Intent intent;
int code = resp.errCode;
switch (code) {
case BaseResp.ErrCode.ERR_OK:
String codeWx = ((SendAuth.Resp) resp).code;
EventBus.getDefault().post(new WxLoginEvent(codeWx));
finish();
break;
default:
finish();
break;
}
}
@Override
public void onReq(BaseReq baseReq) {
}
@Subscribe
public void onEventMainThread(WxLoginEvent event) {
}
}
第三方通过code进行获取access_token的时候需要用到,code的超时时间为10分钟,一个code只能成功换取一次access_token即失效。code的临时性和一次保障了微信授权登录的安全性。第三方可通过使用https和state参数,进一步加强自身授权登录的安全性。
这样客户端使用的地方只要:
//微信登录,跳转至微信授权页面
WXEntryActivity.loginWeixin(mActivitySelf, MyApplication.sApi);
5. 通过code获取授权口令access_token
我们在onResp的回调方法中获取了code,然后通过EventBus将code回调给调用微信登录的类,比如LoginActivity:
WxLoginEvent:
public class WxLoginEvent {
private String code;
public WxLoginEvent(String wxCode) {
code = wxCode;
}
public String getData() {
return code;
}
}
LoginActivity:
@Subscribe
public void onEventMainThread(WxLoginEvent event) {
//通过Wx回调成功后调用Wx登录接口
showDialogLoading(R.string.loading);
wxLogin(event.getData());
}
LoginActivity:文章来源:https://www.toymoban.com/news/detail-833706.html
@Subscribe
public void onEventMainThread(WxLoginEvent event) {
//通过Wx回调成功后调用Wx登录接口
showDialogLoading(R.string.loading);
wxLogin(event.getData());
}
接下来就根据我们的业务流程去完成登录微信登录模块文章来源地址https://www.toymoban.com/news/detail-833706.html
到了这里,关于Android集成微信登录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!