android onekeyshare 微信分享回调,sharesdk 微信登陆分享点击留在微信回调解决方案...

前言

最近碰到一个需求,应用分享后需要知道是否已经分享成功了。因为用的是sharesdk的分享,里面有一个PlatformActionListener监听器是可以实现回调监听的,所以实现了这个监听器(WXEntryActivity并没有执行回调,不知道是我设置问题还是微信太坑了)

public class MySharedListener implements PlatformActionListener{

@Override

public void onComplete(Platform platform, int i, HashMap hashMap) {

// LogUtils.d("完成了");

dimissDialog();

}

@Override

public void onError(Platform platform, int i, Throwable throwable) {

// LogUtils.d("出错了");

dimissDialog();

}

@Override

public void onCancel(Platform platform, int i) {

// LogUtils.d("取消了");

dimissDialog();

}

}

通常情况下是可以回调的,但是一种情况下,回调不执行了,自己在测试微信分享后,点击“留在微信”后并不会执行这个回调了,即使是重新退出微信再回到本应用中,也是不会调用。(瞬间又觉得微信太坑了0.0)

解决

怎么办呢?自己在测试中无意间发现,当你点击微信分享后的“留在微信”后,会执行原来应用中,调起分享那个activity的生命周期方法,虽然不知道为什么会调用,但是感觉这是天意。

既然调用了生命周期方法了,说明,我们就可以知道微信分享成功了。

但是还有一个问题,我怎么才能知道是微信分享的呢?

因为使用的是sharesdk快速分享的方案,布局还有控件什么都是集成好的,所以并没有自己去设置各个分享的点击。

去看看调用过程,发现调用都是通过oks来设置

ShareSDK.initSDK(context);

OnekeyShare oks = new OnekeyShare();

它可以设置回调,就是前面实现的监听器,但它并不管用

oks.setCallback(new MySharedListener(){});

但是它还可以实现点击监听器

oks.setOnShareButtonClickListener(new PlatformListFakeActivity.OnShareButtonClickListener() {

@Override

public void onClick(View v, List checkPlatforms) {

}

});

往上面翻一翻

翻到了这段

public void onClick(View v) {

long time = System.currentTimeMillis();

if (time - lastClickTime < MIN_CLICK_INTERVAL) {

return;

}

lastClickTime = time;

ArrayList platforms = new ArrayList(1);

platforms.add(v.getTag());

parent.onPlatformIconClick(v, platforms);

}

这下清楚了,传递下来的platforms参数,其实就是点击的view控件的tag,打印出tag,你会发现,是以这样的格式

“cn.sharesdk.****”,

其中,****这部分,是各个平台,如qq、wechat,这就知道了吧,我们只要截取这段字符串,就知道是点击了哪个平台了。

测试后发现,微信的是"cn.sharesdk.wechat"

然后,自己去实现一下这个点击监听器

oks.setOnShareButtonClickListener(new PlatformListFakeActivity.OnShareButtonClickListener() {

@Override

public void onClick(View v, List checkPlatforms) {

mProgressDialog.show();

String tag=v.getTag()+"";

if(tag.contains("cn.sharesdk.wechat")){

sharedByWechat=true;//是微信分享,标记为true

}

// LogUtils.d(v.getTag()+"---tag");

}

});判断一下,如果是点击了微信,就给一个标记,说刚才点击的是微信。

然后还要考虑一下,就是微信点击了之后,用户可以取消,也有可能出错,所以就在上面的分享回调监听器中做下处理。

class SharedListener implements PlatformActionListener {

@Override

public void onComplete(Platform platform, int i, HashMap hashMap) {

}

@Override

public void onError(Platform platform, int i, Throwable throwable) {

cancelDialog();

cancel=true;

}

@Override

public void onCancel(Platform platform, int i) {

cancelDialog();

cancel=true;

}

}

这里给一个标记,cancel,标明微信分享是不是已经取消了或者出错了。这个标记用于后续的判断。

然后再创建一个方法,用来综合判断微信分享

/**

* 判断是不是微信分享

*/

public void sharedByWechat(){

if(mShareUtils!=null&&!cancel){

if(mShareUtils.sharedByWechat){

getCoupon();

}

}

}如果是微信分享了,并且没有取消或出错,就执行getCoupon(或者你想要执行的方法)方法,这里的mShareUtils是写的一个sharesdk分享工具类,为了方便调用分享功能。

好了,这里判断就完成了。可以正常的判断微信分享回调了,但是还有一种情况,就是微信分享后,再点“返回***”就是分享后不留在微信,返回本应用。

那样回调也会正常执行了,这里就做一下处理,在onComplete方法中判断一下

if(mShareUtils!=null&&!cancel){

if(mShareUtils.sharedByWechat){

return;

}

}

getCoupon();如果是微信分享的,就直接return,因为我们不需要这个回调,自己能处理了。其它的就正常执行。

到这里就处理完成了。

方法比较麻烦,也没去看过官方文档有没有更好的方法,如果大家有更好的方法,请分享下给我。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值