友盟分享系列-微博分享踩过的坑
来源:互联网 发布:阁瑞钛伦特软件靠谱吗 编辑:程序博客网 时间:2024/06/05 17:19
开发移动应用时,很多都需要接入第三方的登录与统计功能,统计包括下载量、启动次数、页面点击量、分享统计等。这里面比较好是友盟平台,不推荐自己写第三方登录与分享,因为友盟集成了几乎所有平台可以方便的统计与分析应用的数据。以下是在集成微博分享时遇到的崩溃问题与解决方案,希望大家多多的指教哈。
1. 友盟微博分享在android5.0及以上系统点击崩溃问题。
集成友盟分享时我是直接把demo以module的方式引入自己的工程里,这样直接就可以使用,确实省去了不少工作量,微信、qq相继走通,但是出现一个大bug:微博点击发生崩溃。幸好楼主有俩手机,系统恰好分别是4.4、5.0,发生崩溃的恰是后者。详细看了android monitor里面的调试日志信息,针对该问题的调试之路开始了:
一.概述
Android系统升级到5.0之后做了不少的变化,开发人员一定要注意这些变化,要不然就有的折腾了,这里说service变化,其他可以自己搜索相关资料。
二.详情
Service身为Android四大组件之一,它的使用频率还是比较高的,并且现在主要都是运用在比较关键的部位,例如升级推送等。在Android 5.0之后google出于安全的角度禁止了隐式声明Intent来启动Service,也禁止使用Intent filter。否则就会抛出如下异常出来:
官方的解释如下.
那么google到底是怎么限制的呢?限制的判定条件是什么呢?这些都可以从Android 4.4和Android 5.0的源码中找到区别.
在Android 4.4的ContextImpl源码中,能看到如果启动service的intent的component和package都为空并且版本大于KITKAT的时候只是报出一个警报,告诉开发者隐式声明intent去启动Service是不安全的.再往下看,异常都写好了只是注释掉了,看来google早就想这么干了.
果然在Android 5.0的源码中上面注释的代码已经不注释了,当targetSdkVersion版本大于LOLLIPOP直接异常抛出来,要求Service intent必须显式声明。所以如果开发的应用指定targetSdkVersion版本是小于LOLLIPOP的话还是按以前的方式给报个警报,这也就造成了如果没有做了完善的Android 5.0兼容就贸然把targetSdkVersion升到LOLLIPOP的话很有可能就会碰到这个问题。并且这个问题是很严重的,想象一下,你的app自升级的Service是隐式启动的,碰到这个问题后app就不能自升级了,这批用户有可能就一直停留在当前版本。会产生很致命的问题.从源码中的逻辑来看的话,判断一个intent是不是显式声明的点就是component和package,只要这两个有一个生效就不算是隐式声明的,接下来继续分析一下Intent的源码,可以看到下面三种构造方式,设置action来声明Intent是没有构建component的,所以显式声明需要用到第一和第二种构造(还有带packagename或component的拷贝构造),或者后面设置package属性.
三.案例分析
reBuild一下,然后去主项目build文件夹里面的中间资源里面找到module打成的jar包,直接把编译好的.class解压出来.
解压友盟的SDK,进入到正确的路径下直接替换刚才编译出来的.class文件.
回到SDK的跟目录下,运行 jar cvf sdk.jar * 命令进行重打包,将重新打好的SDK替换到项目里面,验证bug.BinGo!搞定!这样就可以打个dex补丁包给线上的版本更新过去修复5.0兼容的bug了.
四.总结
- 友盟分享系列-微博分享踩过的坑
- 友盟集成微信分享的步骤和我踩过的坑
- Android 友盟分享躺过的几个坑,大坑,坑爹
- Android 友盟分享躺过的几个坑,大坑,坑爹啊
- 微信SDK踩过的那些坑。。登录分享支付
- 友盟社会化分享集成微博分享直接报错的解决方法
- 填平友盟社会化分享之---微信分享的坑
- 搭建风控系统道路上踩过的坑 | 一个CPO的心得分享
- ShareSDK社会化分享之那些年我们踩过的坑
- 友盟分享遇到的坑
- 友盟分享遇到的坑
- 友盟社会化分享的坑
- vue2-微信分享踩的坑
- 微博分享遇到的坑
- 新浪微博分享的坑记录
- android通过友盟进行微信分享的坑
- 接入友盟的分享
- 友盟分享的集成
- HDU 4642 Fliping game (简单博弈)
- java8教程-泛型(Generics)
- 扒一扒HTTPS网站的内幕
- maven 工程启动找不到 Spring ContextLoaderListener 的解决办法
- 关于opencv播放视频的笔记
- 友盟分享系列-微博分享踩过的坑
- hdu 5763 kmp + dp
- iOS导航栏对view尺寸的影响
- POJ 2251 - Dungeon Master(BFS)
- Qt 之 setStyleSheet
- ios开发之autolayout 第三方框架Masonry
- 以太坊的MIX项目被终止,开发组转向Remix项目
- 一些iOS开发中一些实用的Demo分享
- 趣味100道C语言编程题num seven