今天在做活動(dòng)分享時(shí)發(fā)現(xiàn)一個(gè)奇怪的現(xiàn)象窄陡。在Twitter炕淮、Facebook、WhatsApp跳夭、本地分享的鏈接一模一樣的情況下涂圆,就WhatsApp出現(xiàn)了參數(shù)被攔截的情況。
舉個(gè)例子币叹,分享鏈接為:https://aaaa.erwer/werw?id=1000&host=324324(我亂打的一串润歉,基本上都是這種格式)
然而當(dāng)你使用WhatsApp分享時(shí)會(huì)發(fā)現(xiàn)分享的串被截的只剩https://aaaa.erwer/werw?id=1000 “&”以后的字符都被截掉了。
Google上一通搜索發(fā)現(xiàn)了原因:WhatsApp對(duì)于字符的編碼颈抚。
解決方法就是(用%26代替&)
urlStr = urlStr.replacingOccurrences(of: "&", with: "%26")
然后接著對(duì)得到的URL進(jìn)行處理(防止出現(xiàn)中文訪問不了的情況)
if let newStr = urlStr.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) {
guard let url = URL(string: newStr) else { return }
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.openURL(url)
} else {
fromVC.alertInfo(title: "", msg: YLLocalizedString("title.share.noWhatsApp"))
}
}
然后你以為就可以了嗎卡辰???九妈?哈哈哈反砌,太天真了蜻牢。打印發(fā)現(xiàn)還是不行亮靴,到底問題出在哪里?打印一下newStr的值你會(huì)發(fā)現(xiàn)newStr=https://aaaa.erwer/werw?id=1000%2526host=324324
這是因?yàn)榻?jīng)過轉(zhuǎn)碼以后把“%”也轉(zhuǎn)換掉了额各,那這個(gè)時(shí)候我們希望轉(zhuǎn)碼的時(shí)候排除對(duì)“%”的轉(zhuǎn)碼晶疼。那接下來得增加一步操作:
var charSet = CharacterSet.urlQueryAllowed
charSet.insert(charactersIn: "%")
if let newStr = urlStr.addingPercentEncoding(withAllowedCharacters: charSet) {
.......
}
經(jīng)過這個(gè)步驟以后你就會(huì)發(fā)現(xiàn)能達(dá)到你要的目的酒贬。小伙伴們有其它關(guān)于國(guó)外主流平臺(tái)的分享或者登陸問題有不懂得可以留言,我看到就會(huì)回復(fù)你翠霍。