首先微信授权登录和支付分为客户端(通过微信官方平台)集成和原生集成
原生集成:需要跟后台进行对接
客户端集成:是自己到微信官方平台去操作即可 跟咱们友盟分享登录一样
1:导入依赖:implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
2:keystore文件放到app目录下
3:在app的build.gradle 中Android 代码块加入keystore文件配置
signingConfigs {//在android代码块下写
debug {//这个地方可以写成 release
storeFile file('tech.keystore')
keyAlias "tech"
storePassword "123456"
keyPassword "123456"
}
}
为避免写错,写在Module的android版本号下面
4:在项目包下一个包名为wxapi,以下代码都写在这个里面
4.1:接下来开始具体代码
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
private IWXAPIiwxapi;
private Stringunionid;
private Stringopenid;
private static StringAPP_ID ="wx4c96b6b8da494224";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 隐藏状态栏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
//接收到分享以及登录的intent传递handleIntent方法,处理结果
iwxapi = WXAPIFactory.createWXAPI(this, APP_ID, false);
iwxapi.handleIntent(getIntent(), this);
}
@Override
public void onReq(BaseReq baseReq) {
Log.e("onReq", "不是请求错误");//我们一般用不到
}
//成功的回调
@Override
public void onResp(BaseResp baseResp) {
//登录回调
switch (baseResp.errCode) {
case BaseResp.ErrCode.ERR_OK://代表成功
if (baseRespinstanceof SendAuth.Resp) {
SendAuth.Resp newResp = (SendAuth.Resp) baseResp;
//获取微信传回的code
String code = newResp.code;
RetrofitManager.getInstance().weChatLogin(code, new Observer() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(WXBean wxBean) {
if (wxBean.getStatus().equals("0000")) {
Log.d("tag", wxBean.getMessage());
SharedPreferences user = MyApplication.context.getSharedPreferences("user", MODE_PRIVATE);
user.edit()
.putString("userId", wxBean.getResult().getUserId() +"")
.putString("sessionId", wxBean.getResult().getSessionId())
.putBoolean("login", true)
.commit();
startActivity(new Intent(WXEntryActivity.this, MainActivity.class));
Toast.makeText(WXEntryActivity.this, wxBean.getMessage(), Toast.LENGTH_SHORT).show();
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED://用户拒绝授权
finish();
break;
case BaseResp.ErrCode.ERR_USER_CANCEL://用户取消
finish();
break;
default:
finish();
break;
}
}
}
4.2:这个是工具类,用来对微信进行一些逻辑性的判断
public class WXUtils {
/**
* APP_ID 替换为你的应用从官方网站申请到的合法appID
*/
public static StringAPP_ID="wx4c96b6b8da494224";
public static IWXAPIreg(Context context) {
if (context !=null) {
//AppConst.WEIXIN.APP_ID是指你应用在微信开放平台上的AppID,记得替换。
IWXAPI wxapi = WXAPIFactory.createWXAPI(context, APP_ID, true);
//注册到微信
wxapi.registerApp(APP_ID);
return wxapi;
}else {
return null;
}
}
//判断是否安装过微信
public static boolean success(Context context) {
if (WXUtils.reg(context).isWXAppInstalled()) {
return true;
}else {
return false;
}
}
}
4.3:接下来就是它的具体运用了,这个就是回调去调用微信授权的代码 所以在他之前要进入这个页面的要发起请求,然后
SendAuth.Req req =new SendAuth.Req();
req.scope ="snsapi_userinfo";
req.state ="wx_login_duzun";
WXUtils.reg(this).sendReq(req);
这就是微信登录的具体实现方法了。