小白踩坑
谨慎! ! ! ! 谨慎! ! ! ! 谨慎! ! ! !
关于微信登录 和微信进行绑定
第一步 :导入依赖
api 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
//api 全局使用
第二步 : Application里面进行初始化App和初始化
public class App extends MultiDexApplication {
public static IWXAPI mWxApi;
@Override
public void onCreate() {
super.onCreate();
mWxApi = WXAPIFactory.createWXAPI(this, "wx4c96b6b8da494224", false);
// 将该app注册到微信
mWxApi.registerApp("wx4c96b6b8da494224");
}
第三步: 清单文件
<activity android:name=".wxapi.WXEntryActivity"
android:exported="true"/>
复制到app下的清单文件下就可以
第四步:创建包 包名:wxapi
注意 : 包一定要在app下建包 如果在base里面调用 能拉起微信登录 但是无法回调(坑一)
扫描二维码关注公众号,回复:
5760431 查看本文章
第五步: 创建微信的回调类
在wxapi下创建WXEntryActivity类 这个是微信的回调比如说是在登录成功之后获取的个人信息在这里进行处理
大概的流程就是这样
具体过程:
1.首先我这里有一个绑定微信的功能
//绑定微信 if (trim.equals("未绑定")) { mTextWeixin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { SendAuth.Req req = new SendAuth.Req(); req.scope = "snsapi_userinfo"; //这个是为了区分是登录还是绑定 req.state = "wechat_sdk_bind"; App.mWxApi.sendReq(req); } }); } //登录微信 if (i == R.id.iv_wx) { if (!mWxApi.isWXAppInstalled()) { Toast.makeText(context, "您还没有安装微信哦~", Toast.LENGTH_SHORT).show(); } else { final SendAuth.Req req = new SendAuth.Req(); req.scope = "snsapi_userinfo"; req.state = "wechat_sdk_login"; mWxApi.sendReq(req); } }
2.微信回调
import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AlertDialog; import android.util.Log; import android.widget.Toast; import com.baselibrary.net.HttpHelper; import com.baselibrary.net.HttpListener; import com.baselibrary.utils.App; import com.baselibrary.utils.SharedPreUtils; import com.example.loginlibrary.entity.LoginEntity; import com.google.gson.Gson; import com.tencent.mm.opensdk.constants.ConstantsAPI; 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.wd.tech.activity.MainActivity; import com.wd.tech.model.SignEntity; import java.util.HashMap; import java.util.Map; /** * by:majunbao */ public class WXEntryActivity extends Activity implements IWXAPIEventHandler { private static final int RETURN_MSG_TYPE_LOGIN = 1; private static final int RETURN_MSG_TYPE_SHARE = 2; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //如果没回调onResp,八成是这句没有写 App.mWxApi.handleIntent(getIntent(), this); } // 微信发送请求到第三方应用时,会回调到该方法 @Override public void onReq(BaseReq req) { } // 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法 //app发送消息给微信,处理返回消息的回调 @Override public void onResp(BaseResp resp) { Log.d("WXEntryActivity", "错误码 : " + resp.errCode + ""); switch (resp.errCode) { case BaseResp.ErrCode.ERR_AUTH_DENIED: case BaseResp.ErrCode.ERR_USER_CANCEL: if (RETURN_MSG_TYPE_LOGIN == resp.getType()) { Toast.makeText(this, "登录失败", Toast.LENGTH_SHORT).show(); } if (RETURN_MSG_TYPE_SHARE == resp.getType()) { Toast.makeText(this, "分享失败", Toast.LENGTH_SHORT).show(); } break; case BaseResp.ErrCode.ERR_OK: switch (resp.getType()) { case RETURN_MSG_TYPE_LOGIN: //拿到了微信返回的code,立马再去请求access_token String code = ((SendAuth.Resp) resp).code; Toast.makeText(this, ""+code, Toast.LENGTH_SHORT).show(); //这里判断类型是微信登录还是绑定微信账号 String state = ((SendAuth.Resp) resp).state; //判断是绑定微信账号 if (state.equals("wechat_sdk_bind")) { /* * 绑定微信 * */ doBindWxHttp(code); } else { /* * 微信登录 获取用户信息 **/ getAccessToken(code); } break; case RETURN_MSG_TYPE_SHARE: Toast.makeText(this, "微信分享成功", Toast.LENGTH_SHORT).show(); finish(); break; } break; } } private void getAccessToken(String code) { Map<String, String> map = new HashMap<>(); map.put("code", code); new HttpHelper(this).post("/techApi/user/v1/weChatLogin",map,null,false,false).result(new HttpListener() { @Override public void success(String data) { if (data != null){ Log.i("TAG","WxBind"+data); LoginEntity loginEntity = new Gson().fromJson(data, LoginEntity.class); LoginEntity.ResultBean result = loginEntity.getResult(); String nickName = result.getNickName(); String headPic = result.getHeadPic(); int userId = result.getUserId(); String sessionId = result.getSessionId(); SharedPreUtils.put(WXEntryActivity.this, "nickName", nickName); SharedPreUtils.put(WXEntryActivity.this, "headPic", headPic); SharedPreUtils.put(WXEntryActivity.this, "userId", userId); SharedPreUtils.put(WXEntryActivity.this, "sessionId", sessionId); SharedPreUtils.put(WXEntryActivity.this,"SUCCESSUP",true); SharedPreUtils.put(WXEntryActivity.this, "isLogin", true); Toast.makeText(WXEntryActivity.this, ""+nickName, Toast.LENGTH_SHORT).show(); Toast.makeText(WXEntryActivity.this, ""+headPic, Toast.LENGTH_SHORT).show(); Toast.makeText(WXEntryActivity.this, ""+userId, Toast.LENGTH_SHORT).show(); Toast.makeText(WXEntryActivity.this, ""+sessionId, Toast.LENGTH_SHORT).show(); startActivity(new Intent(WXEntryActivity.this, MainActivity.class)); finish(); } } @Override public void fail(String error) { } }); } //绑定微信账号 private void doBindWxHttp(String code) { Map<String, String> map = new HashMap<>(); map.put("code", code); new HttpHelper(this).post("/techApi/user/verify/v1/bindWeChat", map, null, false, false).result(new HttpListener() { @Override public void success(String data) { SignEntity signEntity = new Gson().fromJson(data, SignEntity.class); if (signEntity.getStatus().equals("0000")) { Toast.makeText(WXEntryActivity.this, "" + data, Toast.LENGTH_SHORT).show(); //绑定完微信进行做任务 doTaskHttp(); finish(); } else { Toast.makeText(WXEntryActivity.this, "绑定失败", Toast.LENGTH_SHORT).show(); finish(); } } @Override public void fail(String error) { } }); } //绑定完微信进行做任务 private void doTaskHttp() { Map<String, String> map = new HashMap<>(); map.put("taskId", 1007+"" ); new HttpHelper(this).post("techApi/user/verify/v1/doTheTask", map, null, false, false).result(new HttpListener() { @Override public void success(String data) { SignEntity signEntity = new Gson().fromJson(data, SignEntity.class); String status = signEntity.getStatus(); if (status.equals("0000")) { Toast.makeText(WXEntryActivity.this, "做任务成功", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(WXEntryActivity.this, "做任务失败", Toast.LENGTH_SHORT).show(); } } @Override public void fail(String error) { } }); } }