Android集成原生微信授权获取用户信息登录

1、 Android端要使用微信登录,必须在微信开发平台创建APP并且审核通过,得到appid和secret
2、 依赖微信SDK

dependencies {
compile ‘com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+’
}
3、添加权限
<uses-permission android:name="android.permission.INTERNET"/>  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
4、注册到微信
iwxapi = WXAPIFactory .createWXAPI (this, Constant .APP _ID, true) ;
iwxapi
.registerApp (Constant .APP _ID) ;
5、 判断是否安装微信,已安装则发起授权请求
if (!iwxapi.isWXAppInstalled()) {
     Intent intent = new Intent(this, MyDialogActivity.class);
     startActivity(intent);
  }
else {
      final SendAuth.Req req = new SendAuth.Re
q() ;
       req.scope =
"snsapi_userinfo" ;
       req.
state = "wechat_sdk_demo_test" ;
       iwxapi.sendRe
q(req) ;
}
6、在包名下创建wxapi包和WXEntryActivity类(继承Activity并实现IWXAPIEventHandler接口)WXEntryActivity是微信回调的一个类,通常给个透明的主题或者处理完业务逻辑就直接finish。需要在回调中拿到code,然后再根据code去获取AccessToken,然后再根据AccessToken和OpenId去获取UserInfo。
代码如下:
public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {
   
private IWXAPI iwxapi;
   
private String unionid; private String openid;

   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
        getSupportActionBar().hide();
//        // 隐藏状态栏
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
       
//接收到分享以及登录的intent传递handleIntent方法,处理结果
        iwxapi = WXAPIFactory.createWXAPI(
this, Constant.APP_ID, false);
        iwxapi.handleIntent(getIntent(),
this);

    }


   
@Override
   
public void onReq(BaseReq baseReq) {
    }


   
//请求回调结果处理
   
@Override
   
public void onResp(BaseResp baseResp) {
       
//登录回调
       
switch (baseResp.errCode) {
           
case BaseResp.ErrCode.ERR_OK:
                String code = ((SendAuth.Resp) baseResp).code;
               
//获取用户信息
                getAccessToken(code);
               
break;
           
case BaseResp.ErrCode.ERR_AUTH_DENIED://用户拒绝授权
                finish();
               
break;
           
case BaseResp.ErrCode.ERR_USER_CANCEL://用户取消
                finish();
               
break;
           
default:
                finish();
               
break;
        }
    }

   
private void getAccessToken(String code) {
       
//获取授权
        StringBuffer loginUrl =
new StringBuffer();
        loginUrl.append(
"https://api.weixin.qq.com/sns/oauth2/access_token")
                .append(
"?appid=")
                .append(Constant.APP_ID)
                .append(
"&secret=")
                .append(Constant.SECRET)
                .append(
"&code=")
                .append(code)
                .append(
"&grant_type=authorization_code");
        OkHttpUtils.ResultCallback<String> resultCallback =
new OkHttpUtils.ResultCallback<String>() {
           
@Override
           
public void onSuccess(String response) {
                String access =
null;
                String openId =
null;
               
try {
                    JSONObject jsonObject =
new JSONObject(response);
                    access = jsonObject.getString(
"access_token");
                    openId = jsonObject.getString(
"openid");
                }
catch (JSONException e) {
                    e.printStackTrace();
                }
               
//获取个人信息
                String getUserInfo =
"https://api.weixin.qq.com/sns/userinfo?access_token=" + access + "&openid=" + openId;
                OkHttpUtils.ResultCallback<String> reCallback =
new OkHttpUtils.ResultCallback<String>() {
                   
@Override
                   
public void onSuccess(String responses) {

                        String nickName =
null;
                        String sex =
null;
                        String city =
null;
                        String province =
null;
                        String country =
null;
                        String headimgurl =
null;
                       
try {
                            JSONObject jsonObject =
new JSONObject(responses);

                            openid = jsonObject.getString(
"openid");
                            nickName = jsonObject.getString(
"nickname");
                            sex = jsonObject.getString(
"sex");
                            city = jsonObject.getString(
"city");
                            province = jsonObject.getString(
"province");
                            country = jsonObject.getString(
"country");
                            headimgurl = jsonObject.getString(
"headimgurl");
                            unionid = jsonObject.getString(
"unionid");
                            loadNetData(
1, openid, nickName, sex, province,
                                    city, country, headimgurl, unionid);

                        }
catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }

                   
@Override
                   
public void onFailure(Exception e) {
                        Toast.makeText(WXEntryActivity.
this, "登录失败", Toast.LENGTH_SHORT).show();
                        finish();
                    }
                };
                OkHttpUtils.get(getUserInfo, reCallback);
            }

           
@Override
           
public void onFailure(Exception e) {
                Toast.makeText(WXEntryActivity.
this, "登录失败", Toast.LENGTH_SHORT).show();
                finish();
            }
        };
        OkHttpUtils.get(loginUrl.toString(), resultCallback);
    }

   
@Override
   
protected void onPause() {
        overridePendingTransition(
0, 0);
       
super.onPause();
    }



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值