Android 笔记二:集成微信登录。

这是个人在Android集成微信登录的一些总结,开始做微信登录时看了别人写的,但还是云里雾里,所以后来做了很久,弄懂后感觉没其他人写的那么复杂,于是把我的提供给大家参考参考,废话不多说,下面直接进入正题。

第一步:申请

首先要想集成微信登录,就必须在微信开放平台注册账号,注册好账号后点击->管理中心->创建移动应用,然后根据要求填写,完成创建App后就是等待 微信平台的审核,一般一到三天内会审核通过.
在这里插入图片描述
审核通过后会在管理中心看到自己的应用:
在这里插入图片描述
点击查看,就可以看到app已经获得了微信分享和登录等权限已经获得,但这里只说登录。
在这里插入图片描述
审核通过后我我们就获得了微信创建的AppID和 AppSecret,这样我们就可以开始在android中集成了。

第二步:集成:

1.首先添加依赖或下载SDK(Android开发工具包):

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319167&token=&lang=zh_CN

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 ,至此微信登录就完成了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值