近一段時間寫分享功能,原本以為是很簡單的功能,沒曾想后來還是費了些力氣才搞定。
碰到過幾個小問題記錄一下以防止大家踩雷把自己搞得很疲憊。
注冊什么的自己去看相關的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分享出去。
(代碼不多,問題描述很多,圖也懶得截,諒解,有問題聯系)