Android集成微信登录是比较常见的了,此次我把自己集成的过程总结出来,供大家学习参考。
1、首先需要你去微信开放平台申请对应的APPID,地址https://open.weixin.qq.com/,如何申请我就不详细说了哈!
2、集成微信的SDK
api 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
添加所需的权限
/*添加必要的权限支持(其中网络权限如果没有使用扫码登录功能非必要;后三个权限,如果没有使用 mta,也非必要,即使有使用 mta,去掉也不影响功能)*
<uses-permission android:name="android.permission.INTERNET" />
<!-- for mta statistics, not necessary-->
<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_NETWORK_STATE"/>
混淆
/*如果需要混淆代码,为了保证 sdk 的正常使用,需要在 proguard.cfg 加上下面两行配置:*/
-keep class com.tencent.mm.opensdk.** {
*;
}
-keep class com.tencent.wxop.** {
*;
}
-keep class com.tencent.mm.sdk.** {
*;
}
到此初步集成完成啦(当然也可以直接查看官方文档进行集成,但是官方文档可能会遗漏一些东西,建议互补)
3、上代码!!!
<!--在AndroidManifest的application节点下配置微信-->
<activity
android:name=".wxapi.WXEntryActivity"
android:exported="true"
android:label="@string/app_name"
android:launchMode="singleTask"
android:taskAffinity="${applicationId}"
android:theme="@android:style/Theme.Translucent.NoTitleBar"></activity>
/*WXEntryActivity类,建立wxapi包,在此包下建立这个类,注意,wxapi包必须在你的包名下创建,比如你的包名时com.test.test,那么你创建这个包后,这个类所在的路径就是com.test.test.wxapi*/
WXEntryActivity 类的代码如下:
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
private final String TAG = WXEntryActivity.class.getSimpleName();
private final String wxAppId = "AppId";//此处的字符串就是你申请的AppId
private Context mContext;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
MainActivity.api.handleIntent(getIntent(), this);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
MainActivity.api.handleIntent(data, this);
}
//微信发送的请求将回调到 onReq 方法
@Override
public void onReq(BaseReq baseReq) {
}
//发送到微信请求的响应结果将回调到 onResp 方法
@Override
public void onResp(BaseResp baseResp) {
Log.i(TAG, "onResp:------");
Log.i(TAG, "erroe_code:------" + baseResp.errCode);
// int type = baseResp.getType();// 类型:分享还是登录
switch (baseResp.errCode){
//此处可以获取到code值,获取到后,将code传给服务端,由服务端检验即可
case BaseResp.ErrCode.ERR_OK:
String code = ((SendAuth.Resp) baseResp).code;
Log.d(TAG, code);
EventBus.getDefault().post(new WxEvent(code));//我这里利用EventBus将值传给了主界面,你们可以用其他方法代替,想了解EventBus如何使用,可以去百度下,有很多大佬整理的都不错
// Toast.makeText(mContext, code, Toast.LENGTH_SHORT).show();
finish();
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED://用户拒绝授权
finish();
break;
case BaseResp.ErrCode.ERR_USER_CANCEL://用户取消
finish();
break;
default:
break;
}
}
}
4、如何调用这个类呢?继续上代码!!!
/*微信初始化以及调用微信授权*/
//在界面中初始化微信且注册,此处我直接写了一个方法方便你们看
public void wxLogin() {
//声明和注册api
api = WXAPIFactory.createWXAPI(this, "AppId", false);
api.registerApp("AppId");
if (api != null && api.isWXAppInstalled()) {
SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "wechat_sdk_demo_test";
api.sendReq(req);
} else {
Toast.makeText(this, "用户未安装微信", Toast.LENGTH_SHORT).show();
}
}