Android集成微信登录是比较常见的了,此次我把自己集成的过程总结出来,供大家学习参考。

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();
        }
    }

5、这个时候呢,微信登录就算做完啦。各位在集成使用时有什么问题可以评论问我,我看到后会在第一时间回答哈!