Android第三方app 微信授权登录

首先呢,说到第三方,大家应该首先想到的是:
1.appid (第三方给的)
2.密钥 (第三方给的)
3.签名文件
4.包名
这4样,往往决定着的是第三方好用不好用!!! 所以呢…

1.申请你的AppID
请到 微信开发者应用登记页面 进行登记,登记并选择移动应用进行设置后,将该应用提交审核,只有审核通过的应用才能进行开发。

2.下载SDK及API文档
Android Studio环境下:

在build.gradle文件中,添加如下依赖即可:

dependencies {
    compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}

dependencies {
    compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}

3.搭建开发环境
Android Studio环境下:

在Android Studio中新建你的工程,并保证网络设置可以成功从jcenter下载微信SDK即可。

4.在代码中使用开发工具包
[1] AndroidManifest.xml 设置

添加必要的权限支持:

uses-permission android:name="android.permission.INTERNET"/>








[2] 注册到微信

要使你的程序启动后微信终端能响应你的程序,必须在代码中向微信终端注册你的id。(如下图所示,可以在程序入口Activity的onCreate回调函数处,或其他合适的地方将你的应用id注册到微信。注册函数示例如下图所示。

// APP_ID 替换为你的应用从官方网站申请到的合法appID
private static final String APP_ID = "wx88888888";

// IWXAPI 是第三方app和微信通信的openApi接口
private IWXAPI api;

private regToWx() {
    // 通过WXAPIFactory工厂,获取IWXAPI的实例
    api = WXAPIFactory.createWXAPI(this, APP_ID, true);

    // 将应用的appId注册到微信
    api.registerApp(APP_ID);
}

[3] 发送请求或响应到微信(详细可到微信开放平台了解)
一般我们第三方登录只对code做处理,所以我们可以

  //获取code
        SendAuth.Req req = new SendAuth.Req();
        req.scope = "snsapi_userinfo";
        req.state = "wechat_sdk_demo_test";
        api.sendReq(req);

说明:用这段代码向微信开放平台请求授权码code,可拉起微信并打开授权登录页(前提是你安装了微信应用并已登录,未登录的会引导你先登录),如下图:
Android第三方app 微信授权登录_第1张图片

[4] 接收微信的请求及返回值

如果你的程序需要接收微信发送的请求,或者接收发送到微信请求的响应结果,需要下面3步操作:

a. 在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity(例如应用程序的包名为net.sourceforge.simcpux,则新添加的类如下图所示)

Android第三方app 微信授权登录_第2张图片
并在manifest文件里面加上exported属性,设置为true,例如:


        
            
        
    

b. 实现IWXAPIEventHandler接口,微信发送的请求将回调到onReq方法,发送到微信请求的响应结果将回调到onResp方法

c. 在WXEntryActivity中将接收到的intent及实现了IWXAPIEventHandler接口的对象传递给IWXAPI接口的handleIntent方法,示例如下:

api.handleIntent(getIntent(), this);

当微信发送请求到你的应用,将通过IWXAPIEventHandler接口的onReq方法进行回调,类似的,应用请求微信的响应结果将通过onResp回调。示例如下:

public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler{

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate: ");
        WeChatUtil.api.handleIntent(getIntent(),this);
    }

    private static final String TAG = "WXEntryActivity";
    @Override
    public void onReq(BaseReq baseReq) {
        //微信发送的请求回调

    }

    @Override
    public void onResp(BaseResp baseResp) {
    	//微信响应的回调
    	//我们只对code做处理
    	 // 这个code与errorCode不一样,有很大的区别,一定要注意
        int errorCode = baseResp.errCode;
        switch (errorCode) {
            case BaseResp.ErrCode.ERR_OK:
                //用户同意
                //这才是真正需要的code
                String code = ((SendAuth.Resp) baseResp).code;
                //这个是eventbus把code传出去,再做处理
                EventBus.getDefault().post(new CodeEvent(code));
                break;
            case BaseResp.ErrCode.ERR_AUTH_DENIED:
                //用户拒绝
                break;
            case BaseResp.ErrCode.ERR_USER_CANCEL:
                //用户取消
                break;
            default:
                break;
        }
        Log.d(TAG, "onResp: "+baseResp.errStr);
//这个页面一般会显示空白页,直接跳回第三方登录页即可
        Intent intent = new Intent(this, LoginActivity.class);
        startActivity(intent);
        finish();
    }
}

你可能感兴趣的:(android,app,微信第三方登录)