用微信直接登录APP:
首先在build.gradle中的dependencie中添加
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:1.0.2'
在全局的application文件中的onCreate中添加registToWX():
import com.tencent.mm.opensdk.openapi.IWXAPI; import com.tencent.mm.opensdk.openapi.WXAPIFactory;
public static IWXAPI mWxApi; private void registToWX() { //AppConst.WEIXIN.APP_ID是指你应用在微信开放平台上的AppID,记得替换。 mWxApi = WXAPIFactory.createWXAPI(this, "*********", false); // 将该app注册到微信 mWxApi.registerApp("***********"); }
在调用页面的点击事件中加入:
case R.id.iv_wxLogin: wxLogin(); break;
public void wxLogin() { if (!HaierApp.mWxApi.isWXAppInstalled()) { Toast.makeText(this,"您还未安装微信客户端",Toast.LENGTH_SHORT).show(); return; } final SendAuth.Req req = new SendAuth.Req(); req.scope = "snsapi_userinfo"; req.state = "diandi_wx_login"; HaierApp.mWxApi.sendReq(req); }
然后在包名.wxapi文件夹下增加WXEntryActivity文件:
package com.haier.uhome.appliance.wxapi;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.android.volley.VolleyError;
import com.google.gson.Gson;
import com.haier.uhome.appliance.newVersion.contant.HttpConstant;
import com.haier.uhome.appliance.newVersion.contant.ServiceAddr;
import com.haier.uhome.appliance.newVersion.module.login.LoginMainActivity;
import com.haier.uhome.appliance.newVersion.module.winxin.bean.WXBindBean;
import com.haier.uhome.appliance.newVersion.module.winxin.bean.WXOpenId;
import com.haier.uhome.appliance.newVersion.module.winxin.bean.WXUserId;
import com.haier.uhome.appliance.newVersion.result.HomeResult;
import com.haier.uhome.application.HaierApp;
import com.haier.uhome.common.dialog.DialogHelper;
import com.haier.uhome.common.util.LogUtil;
import com.haier.uhome.constant.UserLoginConstant;
import com.haier.uhome.db.operateDao.MessageDao;
import com.haier.uhome.domain.bbs.HttpMessageUtil;
import com.haier.uhome.helper.InitHeader;
import com.haier.uhome.volley.IResponseListener;
import com.haier.uhome.volley.VolleyIMPL;
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 org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Map;
public class WXEntryActivity extends Activity implements IWXAPIEventHandler{
private static final String TAG = "WXEntryActivity";
WXInfoPresenter presenter;
private String appid = "**********";
private String appSecret = "*************";
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
HaierApp.mWxApi.handleIntent(getIntent(),this);
presenter = new WXInfoPresenter();
presenter.attachView(this);
}
// 微信发送请求到第三方应用时,会回调到该方法
@Override
public void onReq(BaseReq baseReq) {
}
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
@Override
public void onResp(BaseResp baseResp) {
Log.e(TAG,"baseResp.errCode");
switch (baseResp.errCode){
case BaseResp.ErrCode.ERR_OK:
String code = ((SendAuth.Resp) baseResp).code;
Log.e(TAG,"code = "+ code);
// presenter.getOpenId(HttpConstant.PERSON_BASE,code);
getOpenId(code);
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
Log.e(TAG,"code =ERR_USER_CANCEL ");
break;
}
this.finish();
}
@Override
public void onFailure(Throwable e) {
}
//获取微信openId
private void getOpenId(String code) {
JSONObject jsonObject = new JSONObject();
JSONArray jsonArray = new JSONArray();
try {
jsonObject.put("code", code);
} catch (JSONException e1) {
e1.printStackTrace();
}
Map<String, String> headers = InitHeader.getHeader(false);
String url = "";
url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+appid
+"&secret="+appSecret+"&code="+code+"&grant_type=authorization_code";
Log.e(TAG,"url="+url);
// }
VolleyIMPL.getNoHeaderResponse(url,headers, new IResponseListener() {
@Override
public void onResponse(JSONObject json) {
try {
Log.e(TAG,"json="+json);
JSONObject object = new JSONObject(json.toString());
if(json.getString("openid") != null && !json.getString("openid").equals("")){
Gson gson = new Gson();
WXOpenId wxOpenId = gson.fromJson(json.toString(),WXOpenId.class);
getWXuserByOpenId(wxOpenId.getOpenid(),wxOpenId.getAccess_token());
}else{
Toast.makeText(WXEntryActivity.this,"获取openId失败",Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
// mhandler.sendEmptyMessage(LOOK_CODE_ERROR);
}
}
@Override
public void onErrorResponse(VolleyError error) {
// mhandler.sendEmptyMessage(LOOK_CODE_ERROR);
}
}, null);
}
//通过openId获取微信用户信息
private void getWXuserByOpenId(String openId,String access_token) {
JSONObject jsonObject = new JSONObject();
JSONArray jsonArray = new JSONArray();
try {
jsonObject.put("code", openId);
} catch (JSONException e1) {
e1.printStackTrace();
}
Map<String, String> headers = InitHeader.getHeader(false);
String url = "";
url = "https://api.weixin.qq.com/sns/userinfo?access_token="+access_token+"&openid="+openId;
Log.e(TAG,"url="+url);
// }
VolleyIMPL.getNoHeaderResponse(url,headers, new IResponseListener() {
@Override
public void onResponse(JSONObject json) {
try {
Log.e(TAG,"json="+json);
if(json.getString("openid") != null){
Gson gson = new Gson();
WXUserId wxUserId = gson.fromJson(json.toString(),WXUserId.class);
Intent intent = new Intent(WXEntryActivity.this, LoginMainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP );
intent.putExtra("wx","wx");
intent.putExtra("wxUser",wxUserId);
startActivity(intent);
}else{
Toast.makeText(WXEntryActivity.this,"获取微信用户信息失败",Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
// mhandler.sendEmptyMessage(LOOK_CODE_ERROR);
}
}
@Override
public void onErrorResponse(VolleyError error) {
// mhandler.sendEmptyMessage(LOOK_CODE_ERROR);
}
}, null);
}
@Override
public void wxBindPhoneSuccess(HomeResult<WXBindBean> result) {
}
// private IWXAPI api;
}
本文介绍如何在Android应用中集成微信登录功能,包括依赖添加、代码实现及关键步骤解析。

7812

被折叠的 条评论
为什么被折叠?



