Android微博,微信,QQ分享功能的实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013055213/article/details/79312424

最近项目要求实现微博,微信,QQ的分享功能,并且要求有分享回调,提示用户分享成功还是失败.当用户从三方应用点击分享的连接的时候,通过h5页面可以下载安装app或者直接进入app的对应页面.

首先说以下我遇到的几个问题吧

  • QQ无法进行回调,但是确实已经分享成功了
  • 多处微博分享出现bug
  • 从三方分享页跳转到本地,出现崩溃现象;三方连接进入详情页还有回调提示
  • 三方分享成功后,选择留在三方,回到桌面,再进入项目,去提示分享失败

QQ无法进行回调,但是确实已经分享成功了

关于QQ分享的配置,官方文档或者博客上都有,需要调用Tencent的方法public void shareToQQ(Activity var1, Bundle var2, IUiListener var3).第三个参数就是我们的回调监听.当我们再次回到详情页面的时候就会走onActivityResult()方法.我们通过判断requestCode是否是QQ分享的请求码就可以.如果是我们就调用这个方法Tencent.onActivityResultData(requestCode, resultCode, data, iUiListener);其他的事就不用我们关心了.但是结果调用方法进行判断的时候总是和QQ的内部逻辑不一致,当时找了好久也没有发现问题.浪费了好多时间,后来发现QQid不是最新的.因为同时进行的还有一个三方登录,QQ的id换了,结果配置文件里面的没有改.注意,ID前要拼接tencent.之所以可以分享成功是因为分享时用的id是最新的,调用的是本地的常量,但是配置文件里面不是,所以回调就会有问题.

多处微博分享出现bug

刚开始我弹出框使用的DialogFragment实现的,而微博回调要求activity的启动类型是singleTask,这样再次进入的时候就会走onNewIntent方法,通过微博分享实例IWeiboShareAPI的handleWeiboResponse(Intent,Response).这个response要继承IWeiboHandler.Response并实现这些回调方法

@Override public void onResponse(BaseResponse baseResponse) {
        if (baseResponse != null) {
            switch (baseResponse.errCode) {
                case WBConstants.ErrorCode.ERR_OK:
                    //分享成功
                    break;
                case WBConstants.ErrorCode.ERR_CANCEL:
                    //分享取消
                    break;
                case WBConstants.ErrorCode.ERR_FAIL:
                    //分享失败
                    break;
            }
        }
    }

开始我在所有的调用分享的类里面都实现了这个方法,结果会先弹出4种选项的弹框,应该是因为我有四处写回调的原因,因为这四个activityactivity的启动方式是singleTask,都有微博的回调,这样就出问题了.所以,弹窗不能用dialogfragment实现,必须用activity实现.这样,所有的回调我们就可以再弹窗的activity上实现了,只用一处就搞定.

从三方分享页跳转到本地,出现崩溃现象;三方连接进入详情页还有回调提示

一开始是进来直接崩溃,原因是在onNewIntent方法中调用了微博分享对象的方法,但是这个方法只有在点击微博之后才初始化,所以加了一个标记,记录是否是点击了微博分享.

@Override protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        if (isWeiBo) {//判断是否点击了微博
            //初始化微博
            HNAHelper.thirdPard().weibo().getWeiboShareObj().handleWeiboResponse(intent, this);
        }
    }

解决了这个问题就出现了下个问题.
这个问题的详细描述就是我从QQ分享的页面点击进入我的详情页时,再点击分享,这个页面就会消失,又出现一个同样的详情页,再点击分享按钮时就没有问题.这个问题也看了好久,断点都跟踪不到.最后根据现象分析了一下,消失的那个详情页时三方进入是创建的,后面出来的那个详情页时分享前的那个.为什么会出现这种情况呢?原因是微博要求在配置文件中设置启动模式是singleTask.关于四种启动方式,我之前的博客有过总结,可以参考一下.回顾基础知识–第一章:Activity的生命周期和启动模式所以当我点击分享时,调用分享弹框就会把我从QQ进来是新压入栈的HomeActivity和详情页全部弹出去,展示之前的.针对这个问题,我把HomeActivity的启动模式也设置成了singleTask,这样每次调用HomeActivity都相当于重新进入这个项目,不会再有之前的activity,也不会在出现三方进来时还有回调的情况,弹吐司的情况.

三方分享成功后,选择留在三方,回到桌面,再进入项目,却提示分享失败

这个问题是因为桌面过来的意图,虽然requestCode是分享码没错,但是resultCode却变了,并且data变成了null,所以才会分享失败的.我添加了对data是否为null的判断,问题解决了.

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // 官方文档没这句代码, 但是很很很重要, 不然不会回调!
        if (requestCode == Constants.REQUEST_QQ_SHARE && data != null) {
            Tencent.onActivityResultData(requestCode, resultCode, data, iUiListener);
        }
    }

关键是一定要使用一个activity来做分享的dialog,否则就前功尽弃了.

猜你喜欢

转载自blog.csdn.net/u013055213/article/details/79312424