今天在做活动分享时发现一个奇怪的现象。在Twitter、Facebook、WhatsApp、本地分享的链接一模一样的情况下,就WhatsApp出现了参数被拦截的情况。
举个例子,分享链接为:https://aaaa.erwer/werw?id=1000&host=324324(我乱打的一串,基本上都是这种格式)
然而当你使用WhatsApp分享时会发现分享的串被截的只剩https://aaaa.erwer/werw?id=1000 “&”以后的字符都被截掉了。
Google上一通搜索发现了原因:WhatsApp对于字符的编码。
解决方法就是(用%26代替&)
urlStr = urlStr.replacingOccurrences(of: "&", with: "%26")
然后接着对得到的URL进行处理(防止出现中文访问不了的情况)
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"))
}
}
然后你以为就可以了吗????哈哈哈,太天真了。打印发现还是不行,到底问题出在哪里?打印一下newStr的值你会发现newStr=https://aaaa.erwer/werw?id=1000%2526host=324324
这是因为经过转码以后把“%”也转换掉了,那这个时候我们希望转码的时候排除对“%”的转码。那接下来得增加一步操作:
var charSet = CharacterSet.urlQueryAllowed
charSet.insert(charactersIn: "%")
if let newStr = urlStr.addingPercentEncoding(withAllowedCharacters: charSet) {
.......
}
经过这个步骤以后你就会发现能达到你要的目的。小伙伴们有其它关于国外主流平台的分享或者登陆问题有不懂得可以留言,我看到就会回复你。