这段时间以来,开发了两个分享SDK,遇到了许多小问题。很开心的是,都一一解决了。在这里总结一下这些坑。
工程地址:https://github.com/xyzlf/ShareSDK
在这里说明一下,我封装的分享SDK,包含微信、微博、QQ、QZone、短信、邮箱、以及系统更多,几个分享渠道。在我开发的App中,有这几个主流的分享渠道就够了。
AndroidManifest中的配置相关的坑
问题:关于配置分享渠道,将微博的key直接配置在value中,如:
取出来的值会自动转化为 sina_weibo_key=4.264835E9 形式,试了几种方式,依然失败,系统会自动转化为长整型。
解决方案:将纯数字的key值保存在string.xml中,然后配置在manifest文件中,如下:
微博分享遇到的坑
(1)问题一:微博分享时,分享的文字不能带有 %s 类似字符,会分享失败。
(2)问题二:分享文案中如果包含URL,并且是如下格式:
该url会被截取成
如果所传的参数是必须的,则会出现跳转异常。应该是微博为防注入,设定的格式限制吧!
解决方案:将包含的URL进行编码。
如下使用场景遇到的坑:
(3)问题三:微博分享必须是正式签名包,不然会认证失败,打包的时候记得签名包就可以了。
微信分享遇到的坑
微信分享API,实在是太简洁,也许微信都是大神级别,不太重视文档相关的工作。相比于QQ的文档,简直差出了几个数量级。网上有人评价说:“实在太懒,能省一行代码,绝对不多写”,甚为贴切。
(1)微信分享必须是签名正式包,并且在微信开放平台已经注册成功,不然认证时会闪退。
(2)如果分享过程用过debug的包,进行过认证分享,安装正式签名包后,需要清除微信的数据,重新启动,否则会出现微信闪退现象。
(3)分享微信过程中,图片不能超过,有些说32kb,有些说64kb,总之在分享过程中需要对图片进行处理,不然分享失败,微信闪退。
我的图片处理方式:
(4)微信分享,必须注册一个Activity:WXEntryActivity,该WXEntryActivity必须实现该接口:com.tencent.mm.sdk.openapi.IWXAPIEventHandler;
并且WXEntryActivity的包名必须是:appPkgName.wxapi; 如:com.demo.wxapi.WXEntryActivity。
微信分享的回调结果,就是通过WXEntryActivity这个Activity回调回来。
QQ分享遇到的坑
QQ分享对key值好像不是特别重要,在之前的公司做分享SDK的时候,给兄弟App用的过程中,因为非该App注册的key也能用,就没太多注意。
加入QZone分享后该问题就暴露了,使用同一个key值,分享回调后会出现选择框。主要原因如下:
谨记:每个App分享,都独自去开发平台注册相应的账号,这种问题,大部分人应该不会遇到,很不幸,我遇到了。