1.在微信开放平台添加需要微信登录的app,审核通过后会得到appId和appSecret 2.添加依赖
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
implementation 'com.squareup.okhttp3:okhttp:3.4.1'
3.添加权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
4.新建一个wxapi包,并在该包下新建WXEntryActivity,让该类继承IWXAPIEventHandler
public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {
private IWXAPI iwxapi;
private String unionid;
private String openid;
private ProgressBar progressBar;
private WXEntryActivity mContext;
private ProgressDialog mProgressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
iwxapi = WXAPIFactory.createWXAPI(this, "你的appid", false);
iwxapi.handleIntent(getIntent(), this);
}
private void createProgressDialog() {
mContext=this;
mProgressDialog=new ProgressDialog(mContext);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);//转盘
mProgressDialog.setCancelable(false);
mProgressDialog.setCanceledOnTouchOutside(false);
mProgressDialog.setTitle("提示");
mProgressDialog.setMessage("登录中,请稍后");
mProgressDialog.show();
}
@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);
Toast.makeText(mContext, "登录成功", Toast.LENGTH_SHORT).show();
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED://用户拒绝授权
Toast.makeText(mContext, "用户拒绝授权", Toast.LENGTH_SHORT).show();
finish();
break;
case BaseResp.ErrCode.ERR_USER_CANCEL://用户取消
Toast.makeText(mContext, "用户取消", Toast.LENGTH_SHORT).show();
finish();
break;
}
}
private void getAccessToken(String code) {
createProgressDialog();
//获取授权
StringBuffer loginUrl = new StringBuffer();
loginUrl.append("https://api.weixin.qq.com/sns/oauth2/access_token")
.append("?appid=")
.append("你的appid")
.append("&secret=")
.append("你的secret")
.append("&code=")
.append(code)
.append("&grant_type=authorization_code");
Log.d("凉城", loginUrl.toString());
OkHttpClient okHttpClient = new OkHttpClient();
final Request request = new Request.Builder()
.url(loginUrl.toString())
.get()//默认就是GET请求,可以不写
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d("凉城", "onFailure: ");
mProgressDialog.dismiss();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String responseInfo= response.body().string();
Log.d("凉城", "onResponse: " +responseInfo);
String access = null;
String openId = null;
try {
JSONObject jsonObject = new JSONObject(responseInfo);
access = jsonObject.getString("access_token");
openId = jsonObject.getString("openid");
} catch (JSONException e) {
e.printStackTrace();
}
getUserInfo(access, openId);
}
});
}
private void getUserInfo(String access, String openid) {
String getUserInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access + "&openid=" + openid;
OkHttpClient okHttpClient = new OkHttpClient();
final Request request = new Request.Builder()
.url(getUserInfoUrl)
.get()//默认就是GET请求,可以不写
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d("凉城424", "onFailure: ");
mProgressDialog.dismiss();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String responseInfo= response.body().string();
Log.d("凉城424", "onResponse: " + responseInfo);
SharedPreferences.Editor editor= getSharedPreferences("userInfo", MODE_PRIVATE).edit();
editor.putString("responseInfo", responseInfo);
editor.commit();
finish();
mProgressDialog.dismiss();
}
});
}
}
5.登录LoginActivity
final IWXAPI api = WXAPIFactory.createWXAPI(this, APP_ID, false);
api.registerApp(APP_ID);
wechat.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View pView) {
if (!api.isWXAppInstalled()) {
Toast.makeText(LoginActivity.this, "您的设备未安装微信客户端", Toast.LENGTH_SHORT).show();
} else {
final SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "wechat_sdk_demo_test";
api.sendReq(req);
}
}
});
参考:https://blog.csdn.net/u014078990/article/details/83752223
|