转载自Android接入微信SDK之一:发起微信授权登录

注意:

包名、应用签名、app id 三者都必须和在腾讯上申请的一致!!!否则将不能成功。

包名:就是在腾讯上申请的包名

应用签名:使用微信官网提供的《签名生成工具》(这个工具是一个apk安装包)安装到手机上获取包的签名(先将你的程序安装到手机上,再安装签名生成工具,在工具上输入你程序包名就可以获得)

app id:微信申请后可获得


1.添加sdk:在build.gradle(app)文件中,添加如下依赖即可

dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {        exclude group: 'com.android.support', module: 'support-annotations'    })    compile 'com.android.support:appcompat-v7:25.3.1'    compile 'com.android.support.constraint:constraint-layout:1.0.2'    /*1.微信登录 sdk添加*/    compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'    testCompile 'junit:junit:4.12'}
2.添加权限(在AndroidManifest中)

                     
3.创建全局变量存储app_id

/** * 全局变量 * Created by Administrator on 2017/10/18. */public class Constants {    /**     * 3.创建全局的appId     */    public static final String APP_ID = "wx_*******"; //替换为申请到的app id    public static IWXAPI wx_api; //全局的微信api对象}
4.创建微信api并注册到微信,在发送登录请求,一般在onCreate()方法中调用

/**         * 4. 创建微信api并注册到微信         */        Constants.wx_api = WXAPIFactory.createWXAPI(mContext, Constants.APP_ID, true);        Constants.wx_api.registerApp(Constants.APP_ID);
5.发送登录请求(点击按钮通过微信登录)

  @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.btn_weixin:                /**                 * 5.发送登录请求(在登录前先判断手机是否安装了微信)                 */                  if(!ConstantUtils.wx_api.isWXAppInstalled()){                MyToast.makeText(mContext,"未安装微信客户端",Toast.LENGTH_SHORT).show();                    return;            }                             final SendAuth.Req req = new SendAuth.Req();                req.scope = "snsapi_userinfo";                req.state = "wechat_sdk_demo_test";                Constants.wx_api.sendReq(req);                break;        }    }
5.获取微信登录的返回结果

1.在包名下新增wxapi文件夹(这个文件夹名字是微信官方规定的,必须一致)

2.在wxapi文件夹下新增继承于Activity并实现IWXAPIEventHandler接口的WXEntryActivity类(这个类名是微信官方规定的,必须一致)


全部代码

package com.shop.hsz88.wxapi;import android.app.Activity;import android.os.Bundle;import com.shop.hsz88.Constants;import com.tencent.mm.opensdk.modelbase.BaseReq;import com.tencent.mm.opensdk.modelbase.BaseResp;import com.tencent.mm.opensdk.modelmsg.SendAuth;import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;import com.tencent.mm.opensdk.utils.Log;/** * 6.创建微信返回结果类,并在清单文件中配置 * Created by Administrator on 2017/10/18. */public class WXEntryActivity extends Activity implements IWXAPIEventHandler {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        Constants.wx_api.handleIntent(getIntent(), this);    }    //微信请求相应    @Override    public void onReq(BaseReq baseReq) {    }    //发送到微信请求的响应结果    @Override    public void onResp(BaseResp resp) {        switch (resp.errCode) {            case BaseResp.ErrCode.ERR_OK:                Log.i("WXTest","onResp OK");                if(resp instanceof SendAuth.Resp){                    SendAuth.Resp newResp = (SendAuth.Resp) resp;                    //获取微信传回的code                    String code = newResp.code;                    Log.i("WXTest","onResp code = "+code);                }                break;            case BaseResp.ErrCode.ERR_USER_CANCEL:                Log.i("WXTest","onResp ERR_USER_CANCEL ");                //发送取消                break;            case BaseResp.ErrCode.ERR_AUTH_DENIED:                Log.i("WXTest","onResp ERR_AUTH_DENIED");                //发送被拒绝                break;            default:                Log.i("WXTest","onResp default errCode " + resp.errCode);                //发送返回                break;        }        finish();    }}

配置Activity

          


布局



获取微信用户信息,简称3步曲

* 1.sendReq(req). 用户授权可以拿到 code** 2.用code.调用Wx接口拿到 openid & accessToken** 3.通过openid & accessToken 俩参数可以拿到最终用户信息

url里各个参数的说明

参数 是否必须 说明
appid 应用唯一标识,在微信开放平台提交应用审核通过后获得
secret 应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
code 填写第一步获取的code参数
grant_type 填authorization_code

/** * 2.获取openid 和 ccessToken值用于后期操作
   
 * * @param code 请求码 */private void getAccess_token(final String code) {    new Thread(new Runnable() {        @Override        public void run() {            String path = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="                    + APP_ID                    + "&secret="                    + APP_SECRET                    + "&code="                    + code                    + "&grant_type=authorization_code";            try {                JSONObject jsonObject = JsonUtils.initSSLWithHttpClinet(path);// 请求https连接并得到json结果                if (null != jsonObject) {                    String openid = jsonObject.getString("openid").toString().trim();                    String access_token = jsonObject.getString("access_token").toString().trim();                    getUserMesg(access_token, openid);                }            } catch (Exception e) {                e.printStackTrace();            }        }    }).start();}

获取用户个人信息

/** * 获取微信的个人信息 * * @param access_token * @param openid */private void getUserMesg(final String access_token, final String openid) {    String path = "https://api.weixin.qq.com/sns/userinfo?access_token="            + access_token            + "&openid="            + openid;    try {        JSONObject jsonObject = JsonUtils.initSSLWithHttpClinet(path);// 请求https连接并得到json结果        if (null != jsonObject) {            String nickname = jsonObject.getString("nickname");            int sex = Integer.parseInt(jsonObject.get("sex").toString());            String headimgurl = jsonObject.getString("headimgurl");            Log.e(TAG, "getUserMesg 拿到了用户Wx基本信息.. nickname:" + nickname);        }    } catch (Exception e) {        e.printStackTrace();    }    return;}


更多相关文章

  1. SnappyDB—Android上的NoSQL数据库
  2. Android(安卓)TV开发总结(二)构建一个TV Metro界面(仿泰捷视频TV版)
  3. Andriod的Http请求获取Cookie信息并同步保存,使第二次不用登录也
  4. hook Android系统调用的乐趣和好处
  5. Android(安卓)客户端与服务器端进行数据交互(一、登录服务器端)
  6. HD文件管理器 v0.1.3----- 一款界面简约,功能强大的免费文件管理
  7. 2016年最佳的15款Android黑科技工具你知道吗?
  8. Android(安卓)基于第三方登录(使用Bmob后端云存储数据)实现记忆用
  9. 体验论成败 2011智能手机系统谁唱主角

随机推荐

  1. Fragment的添加方法总结
  2. MIUI 音乐播放器[Android] | 小众软件 >
  3. Android开发干货大全(持续更新)
  4. android 绑定arp
  5. Android Studio 单刷《第一行代码》系列
  6. android中的content provider的使用
  7. Android(安卓)Service的onRebind方法调用
  8. Android中FloatingActionButton的基本使
  9. Android的内存机制
  10. Android 开发中使用 SQLite 数据库