微信分享及授权登录

微信分享及授权登录


分享

流程:进行sdk测初始化(就是注册第三方应用的过程)通过调用微信的sdk,打开微信(携带需要分享的数据),用户在微信中进行相应的操作,第三方应用得到相应的回调,如是否分享成功。

开发前需要了解的

  • 分享到哪里(朋友or朋友圈)
  • 分享的数据类型有哪些
  • 回调的类型(Type及Code)

分享到哪里

  • 朋友:WXSceneSession
  • 朋友圈:WXSceneTimeline

微信分享的常见数据类型

  • 文本:WXTextObject
  • 图片:WXImageObject
  • 音乐:WXMusicObject
  • 视频:WXVideoObject
  • 网页:WXWebpageObject(其中,网页的分享是开发中最常见。)

微信分享的回调

微信的回调需要在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity,实现IWXAPIEventHandler接口,微信发送的请求将回调到onReq方法,发送到微信请求的响应结果将回调到onResp方法。在WXEntryActivity中将接收到的intent及实现了IWXAPIEventHandler接口的对象传递给IWXAPI接口的handleIntent方法。

type

  • COMMAND_SENDAUTH:认证请求
  • COMMAND_SENDMESSAGE_TO_WX:分享请求

code

  • ERR_AUTH_DENIED:认证被否决
  • ERR_COMM:一般错误
  • ERR_OK:正确返回
  • ERR_SENT_FAILED:发送失败
  • ERR_UNSUPPORT:不支持
  • ERR_USER_CANCEL:用户取消

代码的实现

注册到微信

/*要使你的程序启动后微信终端能响应你的程序,必须在代码中向微信终端注册你的id可以把操作放在程序的入口*/
IWXAPI api = WXAPIFactory.createWXAPI(this,ShareID.WEIXIN_ID,true);
api.registerApp(ShareID.WEIXIN_ID);

响应用户的分享操作

这里已分享一个H5页面为例。需要注意的地方有:

  • 图片的大小:thumbData,限制内容大小不超过32KB
  • description:1kb,title:512byte
private void shareWebPage() {
    WXWebpageObject webpage = new WXWebpageObject();
    webpage.webpageUrl = "http://www.baidu.com";

    WXMediaMessage msg = new WXMediaMessage(webpage);
    msg.title = "title";
    msg.description = "WebPage Description";

    Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
    msg.thumbData = Util.bmpToByteArray(thumb, true);

    SendMessageToWX.Req req = new SendMessageToWX.Req();
    req.transaction = buildTransaction("webpage");
    req.message = msg;
    req.scene = SendMessageToWX.Req.WXSceneTimeline;
    iwxapi.sendReq(req);
}

WXEntryActivity中的回调

onResp(BaseResp baseResp)方法中,可以获取getType(),判断是不是分享的操作。通过resp.code来判断有没有成功。在上面的code中列出了code的6种类型


微信授权登录

流程:用户点击微信登录,第三方应用通过sdk调起微信的一个授权页面,用户操作后会将回调传回WXEntryActivity类中,然后判断,如果成功,就会得到一个code,通过code再请求微信的接口,获取一个access_token,之后可以利用access_token这个参数请求微信接口,获取用户的个人信息。

开发前需要了解的

  • 微信的授权登录需要安装微信客户端。
  • 授权作用域:代表第三方应用的接口权限
    常见:snsapi_userinfo,用来获取用户的个人信息。
  • 获取access_token,个人信息需要进行网络请求。

代码的实现

请求授权

SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "my_test";
iwxapi.sendReq(req);
其中:state为非必要参数,用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验。

WXEntryActivity中的回调

当用户无论取消授权还是完成授权,同样会来的这里,

/*获取code*/
switch (baseResp.getType()) {
        case ConstantsAPI.COMMAND_SENDAUTH:
            SendAuth.Resp resp = (SendAuth.Resp) baseResp;
            String code = resp.code;
            Log.i(TAG, "code:" + code);
            getToken(code);
            break;
    }

通过code获取access_token。

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

利用access_token获取用户的个人信息

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

可以自行打印看看返回的JSON数据。

总结

关于微信的sdk,这里只是一个更加清晰的流程,介绍。在开发过程中还有许多要注意的地方,如WXEntryActivity的关闭,分享的图片清晰度,大小的限制直接的平衡,授权登录时候的网络请求。

一个App中基本上不可能只集成一个微信,需要同时处理新浪,QQ等。

在调试过程去,如果换了appid,签名信息或者其它,代码如果没问题,就是不能分享,可以尝试清空微信的数据。

传送门:微信官方Android集成指南微信Android SDK文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值