近一段时间写分享功能,原本以为是很简单的功能,没曾想后来还是费了些力气才搞定。
碰到过几个小问题记录一下以防止大家踩雷把自己搞得很疲惫。
注册什么的自己去看相关的SDK文档,相信都不难,下面就碰到的问题做一下阐述:
1、检测是否安装该app:
之前用的友盟分享,使用简单SDK,使用判断方法:
if umeng.isInstall(UMSocialPlatformType.wechatSession) {
//
}
但是该判断方法存在缓存问题,也就是你如果在使用中删除了某app,它是检测不到的。当然如果不是很严格的话这个方法也可以使用,至多提示分享失败。
let hasWeChat = UIApplication.shared.canOpenURL(NSURL.init(string: "weixin://XXX")! as URL)
if !hasWeChat {
FSHub.toast("未安装该应用")
return
}
这个方法能用,其中XXX是URL Schemes。但是也不太安全,因为不管是微信,QQ,还是微博,都不止一个URL Schemes。这个方法是两个应用之间能够互相打开的根本方法。
友盟其实还提供了一个属性:(官方文档)
/**
返回当前有效(安装并是可用的)平台列表
*/
@property(nonatomic,readonly,strong) NSArray * platformTypeArray;
这个属性是可用的,并且没有缓存,可以通过判断相关平台是否在这个数组中来判断是否安装这个了这个平台(总觉得有点歪门邪道的意思,虽然验证过确实可行)
最后我没有使用上面的任何方法,而是把友盟的SDK换成了Mob的shareSDK,使用的判断方法如下:
ShareSDK.isClientInstalled(.wechat);
问题解决【遮脸】
最后提一嘴,分享需要做是否安装判断,未安装的平台最好隐藏,不隐藏的话也不能提示用户诸如“未安装微信”这样的带有明显的app名字的提示语,苹果会认为你引导用户安装该平台。应该写成“未安装该平台“之类的,总之不要出现带明显app信息的字眼。
2、关于微信分享回调错误的问题
问题复现:点击微信分享,分享成功后选择留在微信,按下home键回到桌面,在打开app,会看到分享取消的提醒。
这是因为只有直接返回才会走成功回调的函数,其他任何条件都是走取消的函数,这个不是sdk的问题, 是苹果的应用权限机制的问题,留在第三方相当于已经没有权限访问您自己的应用,所以拿不到成功回调,但是事实是成功的,关于这个问题目前是没有办法处理的,最好的方法是去掉取消分享的弹窗。
3、关于QQ分享,接收到分享信息的人只显示链接(有可能是短链接,也有可能是完整链接),而不是图文并存的格式:
这是因为QQ分享要求分享出去的链接是转化后的模式,例如https://www.baidu.com
,而不能是http://183.64.206.217:8888/
这样带有明显域名的样式。(这个问题一般会在测试的时候会有,线上应该不会有这个问题)
4、关于微信分享web,缩略图不显示的问题
如果任何情况下分享的缩略图都不显示,请检查图片尺寸,bundle id ,app key ,app secret,url schemes 等是否对应或设置正确。
现在有一种特殊情况:不管是iOS设备还是安卓设备,成功分享到微信,一切显示正常,但是如果接收这条分享信息的设备是iOS设备(iPhone,iPad,等)缩略图不显示,但是如果是安卓设备,缩略图就正常显示了。
这个问题问过Mob的客服,客服说是微信本身的问题,但是我分享别的app里面的内容到微信都显示正常,所以我觉得不是微信的问题。
最后经过各种尝试:发现是分享内容的问题。分享的标题描述里面含有“XXX元”,“赚钱”等字眼,修改了标题描述后再分享,各个设备的显示就都正常了。(想配个图来说明一下的,懒得截图😄)
5、Mob分享微博,使用shareSDK,分享内容不能编辑的问题。
使用shareSDK的都知道微博分享授权成功后点击分享直接就分享出去了而没有编辑界面,而有的时候又有编辑的需求,这个时候只能自己写一个controller作为编辑页面,编辑完成后的内容作为content分享出去。
(代码不多,问题描述很多,图也懒得截,谅解,有问题联系)