这是个人在Android集成微信登录的一些总结,开始做微信登录时看了别人写的,但还是云里雾里,所以后来做了很久,弄懂后感觉没其他人写的那么复杂,于是把我的提供给大家参考参考,废话不多说,下面直接进入正题。
第一步:申请
首先要想集成微信登录,就必须在微信开放平台注册账号,注册好账号后点击->管理中心->创建移动应用,然后根据要求填写,完成创建App后就是等待 微信平台的审核,一般一到三天内会审核通过.
审核通过后会在管理中心看到自己的应用:
点击查看,就可以看到app已经获得了微信分享和登录等权限已经获得,但这里只说登录。
审核通过后我我们就获得了微信创建的AppID和 AppSecret,这样我们就可以开始在android中集成了。
第二步:集成:
1.首先添加依赖或下载SDK(Android开发工具包):
Android Studio环境下:
在build.gradle中的 dependencies 下添加依赖:
dependencies {
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}
2.创建WXEntryActivity。
在你的包名相应目录下新建一个 wxapi 目录,并在该 wxapi 目录下新增一个 WXEntryActivity 类,该类继承自Activity,并 实现 IWXAPIEventHandler 。
要使你的程序启动后微信终端能响应你的程序,必须在代码中向微信终端注册你的appid。
以下是示例代码,使用的是OkHttpUtils 网络框架,可选用其他网络请求框架:
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
private static OnResponselisener Responsedata;
private String APP_SECRET = "";
private static final String WEIXIN_APP_ID = "";
private IWXAPI iwxapi;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
iwxapi= WXAPIFactory.createWXAPI(this, WEIXIN_APP_ID, true); //注册微信,可在其他的地方注册,注册一次即可
iwxapi.handleIntent(this.getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
iwxapi.handleIntent(intent, this);//必须调用此句话
}
//
//微信发送的请求将回调到onReq方法
@Override
public void onReq(BaseReq req) {
}
//发送到微信请求的响应结果
@Override
public void onResp(BaseResp resp) {
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
//发送成功
SendAuth.Resp sendResp = (SendAuth.Resp) resp;
if (sendResp != null) {
String code = sendResp.code;
getAccess_token(code);
}
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
Toast.makeText(this, "发送取消", Toast.LENGTH_SHORT).show();
//发送取消
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
Toast.makeText(this, "发送被拒绝", Toast.LENGTH_SHORT).show();
//发送被拒绝
break;
default:
//发送返回
break;
}
}
/**
* 获取openid accessToken值用于后期操作
* @param code 请求码
*/
private void getAccess_token(final String code) {
String path = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
+ WEIXIN_APP_ID
+ "&secret="
+ APP_SECRET
+ "&code="
+ code
+ "&grant_type=authorization_code";
HttpUtils_GET(path);
}
private void HttpUtils_GET(String url) {
OkHttpUtils.get().url(url).build().connTimeOut(20000).
readTimeOut(20000).writeTimeOut(20000).execute(new MyStringCallback());
}
public class MyStringCallback extends StringCallback
{
ProgressDialog dialog=null;
@Override
public void onBefore(Request request, int id)
{
if (dialog==null) {
dialog= ProgressDialog.show(WXEntryActivity.this, "", "正在加载...");
dialog.show();
}
}
@Override
public void onAfter(int id)
{
}
@Override
public void onError(Call call, Exception e, int id)
{
if (dialog!=null&&dialog.isShowing()) {
dialog.dismiss();
dialog=null;
}
if (e.getMessage()!=null) {
if (e.getMessage().contains("500")) {
Toast.makeText(WXEntryActivity.this, "请求失败", Toast.LENGTH_SHORT).show();
} else if (e.getMessage().equals("timeout")) {
Toast.makeText(WXEntryActivity.this, "请求超时,请稍后重试", Toast.LENGTH_SHORT).show();
}else if (e.getMessage().contains("404")){
Toast.makeText(WXEntryActivity.this, "无法找到服务器,请稍后重试", Toast.LENGTH_SHORT).show();
}
}
e.printStackTrace();
}
@Override
public void onResponse(String response, int id)
{
try{
//数据回调
Responsedata.setResponse(response);
finish();
}catch (Exception e){
e.printStackTrace();
}
if (dialog!=null&&dialog.isShowing()) {
dialog.dismiss();
dialog=null;
}
}
@Override
public void inProgress(float progress, long total, int id)
{
if (dialog==null) {
dialog= ProgressDialog.show(WXEntryActivity.this, "", "正在加载...");
dialog.show();
}
}
}
public static void getOnResponselisener(OnResponselisener data) {
Responsedata = data;
}
public interface OnResponselisener {
void setResponse(String Response);
}
@Override
public void onDestroy(){
OkHttpUtils.getInstance().cancelTag(this);
super.onDestroy();
}
}
3.调用微信登录。
准备工作已经做完,可直接调取微信进行登录,以下为调用方法,放在自己适合的场景中。
if (iwxapi != null && iwxapi .isWXAppInstalled()) {
SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "wechat_sdk_demo_test";
iwxapi .sendReq(req);
//数据回调,可根据个人情况实现回调方法
WXEntryActivity.getOnResponselisener(new WXEntryActivity.OnResponselisener() {
@Override
public void setResponse(String response) {
WXLoginData(response); //此处为微信回调的个人信息
}
});
} else {
Toast.makeText(this, "您尚未安装微信", Toast.LENGTH_SHORT).show();
}
iwxapi 为在Activity中注册微信终端的 iwxapi ,至此微信登录就完成了。