android studio实现微信登录

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

注意:

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

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

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

app id:微信申请后可获得


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

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

[html]  view plain  copy
  1. <!--2.微信登录权限-->  
  2.    <uses-permission android:name="android.permission.INTERNET"/>  
  3.    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
  4.    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  
  5.    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>  
  6.    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  
3.创建全局变量存储app_id

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

[java]  view plain  copy
  1. /** 
  2.          * 4. 创建微信api并注册到微信 
  3.          */  
  4.   
  5.         Constants.wx_api = WXAPIFactory.createWXAPI(mContext, Constants.APP_ID, true);  
  6.         Constants.wx_api.registerApp(Constants.APP_ID);  
5.发送登录请求(点击按钮通过微信登录)

[java]  view plain  copy
  1. @Override  
  2.   public void onClick(View v) {  
  3.       switch (v.getId()){  
  4.           case R.id.btn_weixin:  
  5.               /** 
  6.                * 5.发送登录请求 
  7.                */  
  8.               final SendAuth.Req req = new SendAuth.Req();  
  9.               req.scope = "snsapi_userinfo";  
  10.               req.state = "wechat_sdk_demo_test";  
  11.               Constants.wx_api.sendReq(req);  
  12.               break;  
  13.       }  
  14.   }  
5.获取微信登录的返回结果

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

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


全部代码

[java]  view plain  copy
  1. package com.shop.hsz88.wxapi;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5.   
  6. import com.shop.hsz88.Constants;  
  7. import com.tencent.mm.opensdk.modelbase.BaseReq;  
  8. import com.tencent.mm.opensdk.modelbase.BaseResp;  
  9. import com.tencent.mm.opensdk.modelmsg.SendAuth;  
  10. import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;  
  11. import com.tencent.mm.opensdk.utils.Log;  
  12.   
  13. /** 
  14.  * 6.创建微信返回结果类,并在清单文件中配置 
  15.  * Created by Administrator on 2017/10/18. 
  16.  */  
  17.   
  18. public class WXEntryActivity extends Activity implements IWXAPIEventHandler {  
  19.     @Override  
  20.     public void onCreate(Bundle savedInstanceState) {  
  21.         super.onCreate(savedInstanceState);  
  22.   
  23.         Constants.wx_api.handleIntent(getIntent(), this);  
  24.     }  
  25.   
  26.     //微信请求相应  
  27.     @Override  
  28.     public void onReq(BaseReq baseReq) {  
  29.   
  30.     }  
  31.   
  32.     //发送到微信请求的响应结果  
  33.     @Override  
  34.     public void onResp(BaseResp resp) {  
  35.         switch (resp.errCode) {  
  36.             case BaseResp.ErrCode.ERR_OK:  
  37.                 Log.i("WXTest","onResp OK");  
  38.   
  39.                 if(resp instanceof SendAuth.Resp){  
  40.                     SendAuth.Resp newResp = (SendAuth.Resp) resp;  
  41.                     //获取微信传回的code  
  42.                     String code = newResp.code;  
  43.                     Log.i("WXTest","onResp code = "+code);  
  44.                 }  
  45.   
  46.                 break;  
  47.             case BaseResp.ErrCode.ERR_USER_CANCEL:  
  48.                 Log.i("WXTest","onResp ERR_USER_CANCEL ");  
  49.                 //发送取消  
  50.                 break;  
  51.             case BaseResp.ErrCode.ERR_AUTH_DENIED:  
  52.                 Log.i("WXTest","onResp ERR_AUTH_DENIED");  
  53.                 //发送被拒绝  
  54.                 break;  
  55.             default:  
  56.                 Log.i("WXTest","onResp default errCode " + resp.errCode);  
  57.                 //发送返回  
  58.                 break;  
  59.         }  
  60.         finish();  
  61.     }  
  62. }  

配置Activity

[html]  view plain  copy
  1. <activity  
  2.     android:exported="true"  
  3.     android:name=".wxapi.WXEntryActivity"   
  4.     android:launchMode="singleTop"  
  5.     android:theme="@android:style/Theme.NoDisplay"/>    


布局



获取微信用户信息,简称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;
}

  • 8
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值