Android 微信登录详细编写流程

流程讲解:

第一步:先去微信平台注册账号,填写应用信息,提交审核,大概需要三到五天的时间审核完成;

第二步:审核完成微信开放平台会生成一个appid,和sercet 这两个是唯一的id 需要妥善保管;

第三步:按照微信开放平台给的文档,下载相应的sdk以及签名工具,在此强调 必须是用签名打包的正式版的apk才可以调起微信的客户端进行授权登录,必须保证应用的签名(用签名工具可以获取)和开放平台上填写的信息一致。

以上三步完成后我们就可以开始支付的编写了

1.添加依赖

compile'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:1.0.2'

2.清单文件中添加权限

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

在清单文件中将exported="true",其中包名wxapi与类名WXEntryActivity不可随意更改。

<activity android:name=".wxapi.WXEntryActivity"android:exported="true"></activity>

3.进行微信注册

我们先在app中继承Application,在OnCreate中处理获取到的方法,在这个里面我们进行了对外暴露一个实例getApi,便于在其他类中进行调用。

public class app extends Application {

    public static final String APP_ID = "此乃获得的appid";
    private static IWXAPI mApi;

    @Override
    public void onCreate() {
        super.onCreate();
        //接收到分享以及登录的intent传递handleIntent方法,处理结果
        mApi = WXAPIFactory.createWXAPI(this, APP_ID,true);
        //注册到微信
        mApi.registerApp(APP_ID);
    }
    public static IWXAPI getApi(){
        return mApi;
    }
}

4.调用登录页面

当我们点击微信图标进行微信登录时,触发点击事件在其中进行以下操作。

if (!app.getApi().isWXAppInstalled()) {
                    ToastUtils.setToastTextview(WXLoginActivity.this, "您的设备未安装微信客户端");
                    ToastUtils.show();
                }else {
                    SendAuth.Req req = new SendAuth.Req();
                    //此处中"snsapi_userinfo"不可以更改
                    req.scope="snsapi_userinfo";
                    //此处可随意编写
                    req.state="wx_cc";
                    app.getApi().sendReq(req);
                }

5.创建WXEntryActivity类实现微信登录接收响应

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //调用app类中的getApi方法,获取mApi,切记这句必写
        app.getApi().handleIntent(getIntent(),this);
    }

    @Override
    public void onReq(BaseReq baseReq) {

    }

    @Override
    public void onResp(BaseResp baseResp) {
        switch (baseResp.errCode){
            //登陆成功
            case BaseResp.ErrCode.ERR_OK:
            //登陆成功,获取code值
                String code = ((SendAuth.Resp) baseResp).code;
                Log.e("Code++", code);
                //通过EventBus将获取到的code值,传递到登录页面
                WXEventBean wxEventBean = new WXEventBean();
                wxEventBean.setCode(code);
                EventBus.getDefault().postSticky(wxEventBean);
                break;
            case BaseResp.ErrCode.ERR_AUTH_DENIED:
                Toast.makeText(this, "授权出错", Toast.LENGTH_SHORT).show();
                finish();
                break;
            case BaseResp.ErrCode.ERR_USER_CANCEL:
                Toast.makeText(this, "取消登录", Toast.LENGTH_SHORT).show();
                finish();
                break;
            default:
                finish();
                break;
        }
    }
}

总结经验:

1.登录所在的页面必须在我们注册时所提交的包中,包名必须一致若不一致必须更改,否则会提示包名出错。

2.在清单文件中必须添加android:exported="true",否则将获取不到code值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容