zoukankan      html  css  js  c++  java
  • Android微信登陆


    前言

    分享到微信朋友圈的功能早已经有了,但微信登录推出并不久,文档写的也并不是很清楚,这里记录分享一下。 

    声明
    欢迎转载,但请保留文章原始出处:) 
    博客园:http://www.cnblogs.com
    农民伯伯: http://over140.cnblogs.com 

    正文

    一、准备

    注册、认证步骤自己来。微信开放平台:https://open.weixin.qq.com

    二、 代码

    2.1 唤起微信登录

    参考官网文档:资源中心/移动应用开放/接入指南/Android接入指南 

        private IWXAPI mWeixinAPI;

        private void loginWithWeixin() {
            if (mWeixinAPI == null) {
                mWeixinAPI = WXAPIFactory.createWXAPI(this, WEIXIN_APP_ID, false);
            }

            if (!mWeixinAPI.isWXAppInstalled()) {
                //提醒用户没有按照微信
                return;
            }

            mWeixinAPI.registerApp(WEIXIN_APP_ID);

            SendAuth.Req req = new SendAuth.Req();
            req.scope = WEIXIN_SCOPE;
            req.state = WEIXIN_STATE;
            mWeixinAPI.sendReq(req);
        }

    WEXIN_SCOPE 这里填的snsapi_userinfo,用snsapi_base提示没权限。

    WEIXIN_STATE 用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验。

    不出意外就能唤起微信登录了。 

    2.2 接收微信的请求及返回值

    在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,参考文档在AndroidManifest.xml注册Activity。

    public class WXEntryActivity extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            handleIntent(getIntent());
        }

        @Override
        protected void onNewIntent(Intent intent) {
            super.onNewIntent(intent);
            handleIntent(intent);
        }

        private void handleIntent(Intent intent) {
            SendAuth.Resp resp = new SendAuth.Resp(intent.getExtras());
            if (resp.errCode == BaseResp.ErrCode.ERR_OK) {
                //用户同意
            }
        }
    }

    注意,这里和微信的例子写的有点不一样,不过结果是一样的,这个能取到code等信息,测试返回数据如下:

            E/WXEntryActivity(14288): onCreate...key:_wxapi_sendauth_resp_state xxx
            E/WXEntryActivity(14288): onCreate...key:_wxapi_sendauth_resp_token xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
            E/WXEntryActivity(14288): onCreate...key:_mmessage_appPackage com.tencent.mm
            E/WXEntryActivity(14288): onCreate...key:_wxapi_baseresp_transaction null
            E/WXEntryActivity(14288): onCreate...key:_wxapi_sendauth_resp_lang zh_CN
            E/WXEntryActivity(14288): onCreate...key:_wxapi_command_type 1
            E/WXEntryActivity(14288): onCreate...key:_mmessage_content null
            E/WXEntryActivity(14288): onCreate...key:_wxapi_sendauth_resp_country null
            E/WXEntryActivity(14288): onCreate...key:_mmessage_checksum [B@426358e8
            E/WXEntryActivity(14288): onCreate...key:wx_token_key com.tencent.mm.openapi.token
            E/WXEntryActivity(14288): onCreate...key:_wxapi_sendauth_resp_url xxxxxxxxxxx
            E/WXEntryActivity(14288): onCreate...key:_mmessage_sdkVersion 570490883
            E/WXEntryActivity(14288): onCreate...key:_wxapi_baseresp_errcode 0
            E/WXEntryActivity(14288): onCreate...key:_wxapi_baseresp_errstr null
            E/WXEntryActivity(14288): onCreate...key:_wxapi_baseresp_openId null

    xxx部分的内容我已经隐掉了,拿到code就能拿到access——token了,后续依据文档调用即可。

    这里你可以把WXEntryActivity的theme弄成透明的,然后再弹起来一个ProgressDialog进行后续的操作(提交你自己的服务器),就能和现有的界面完全融合了。
     

    三、注意:

    3.1 获取签名必须用release包。(所以你会发现微信、微博SDK取得值是一样,所以如果已经有了微博的签名可以直接拷贝到微信使用)

    结束

    纠结到底是微信登录还是QQ登录,,,, 

  • 相关阅读:
    Django 模版当中使用中文 UnicodeDecodeError at / 问题
    sql中索引不会被用到的几种情况
    Django安装
    分享一个webapi接口性能测试的工具
    orleans 2.0 进阶之自定义持久化储存
    centos7 .net core 使用supervisor守护进程,可以后台运行
    将.net core 发布到Linux上的一些坑
    .net core 部署在Linux系统上运行的环境搭建总结
    .net core 基于NPOI 的excel导入导出类,支持自定义导出哪些字段,和判断导入是否有失败的记录
    基于Ace Admin 的菜单栏实现
  • 原文地址:https://www.cnblogs.com/over140/p/4127271.html
Copyright © 2011-2022 走看看