iOS Universal Links詳細(xì)配置 適配微信sdk1.8.6以上版本

為了適配微信最新sdk, 最近搞了一下Universal Links, 好處就不多說(shuō)了, 說(shuō)一下如果不適配的壞處

  • 部分機(jī)型分享后顯示"未驗(yàn)證應(yīng)用"
  • 每次打包上傳都有UIWebview使用有警告, 再不適配就上不了線了

微信sdk1.8.6.1 更新內(nèi)容

  • UIWebview切換成WKWebview
  • 支持Universal Link拉起微信以及返回App

微信注冊(cè)的方法只有下面這一個(gè), 必須填寫(xiě)Universal Links, 所以只有搞一下Universal Links了

+ (BOOL)registerApp:(NSString *)appid universalLink:(NSString *)universalLink;

Universal Links配置

第一步 配置apple-app-site-association文件

  1. 創(chuàng)建名稱為apple-app-site-association的json文件, 一定不能帶后綴, 文件內(nèi)容為
    官網(wǎng)例子
{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "9JA89QQLNQ.com.apple.wwdc",
                "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
            },
            {
                "appID": "ABCD1234.com.apple.wwdc",
                "paths": [ "*" ]
            }
        ]
    }
}

自己項(xiàng)目例子 按照微信寫(xiě)的appID以微信為例

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "HQH47S9JSQ.help.wechat.com",
                "paths": [ "/app/*" ]
            }
        ]
    }
}

內(nèi)容解釋

  • details: 是個(gè)數(shù)組, 可以配置多個(gè)app
  • appID: TeamID + '.' + BundleID, 看上面例子應(yīng)該很好理解, TeamID在哪兒呢, 下面會(huì)提到.
  • paths: 域名后拼接的路徑, 不能帶query參數(shù), 微信使用Universal Links拉起第三方App時(shí),會(huì)在Universal Links末尾拼接路徑和參數(shù),因此App配置的paths必須加上通配符/*, 按照微信配置的例子, Universal Links就是https://help.wechat.com/app
  1. apple-app-site-association文件上傳服務(wù)器
    服務(wù)器一定要支持https, 讓服務(wù)端的同學(xué)把json文件上傳到域名的根目錄下或者.well-known目錄下,蘋(píng)果會(huì)優(yōu)先去.well-known文件夾下找, 如果沒(méi)有就去跟目錄下載, 我們是兩個(gè)地方都傳了.
    https://xxx/apple-app-site-association
    https://xxx/.well-known/apple-app-site-association
    上傳完成后, 點(diǎn)擊上面的鏈接應(yīng)該是下載json文件就對(duì)了, 打開(kāi)看一下內(nèi)容對(duì)不對(duì), 一定是下載json文件, 不是直接打開(kāi)

上傳完成后可以先驗(yàn)證一下蘋(píng)果驗(yàn)證工具, 輸入https://xxx/.well-known/apple-app-site-association, 等出現(xiàn)下圖提示就可以

鏈接驗(yàn)證

第二步 開(kāi)啟Associated Domains

  1. 登錄公司的開(kāi)發(fā)者賬號(hào), 找到Identifiers-->appId, 勾選Associated Domains
    下面有第一步要的TeamID

    Associated Domains1

    點(diǎn)擊保存時(shí)會(huì)彈窗提示
    提示

    大概意思是,使用該appId的配置文件都會(huì)無(wú)效,必須重新生成, 所以只要用到該appId的文件都要重新配置, 下圖看出, 重新配置的有推送證書(shū)pp描述文件, 配置完后下載更新.
    證書(shū)配置參考
    證書(shū)配置

  2. 打開(kāi)Xcode 添加Associated Domains


    Associated Domains2

添加Universal Links


Associated Domains3
  • Domains: 內(nèi)容為applinks:+域名, 例如上面的例子為applinks:help.wechat.com, 不用加/app/*

添加完后項(xiàng)目中會(huì)多一個(gè).entitlements文件


.entitlements

--->到此Universal Links就配置完成了: https://help.wechat.com/app

第三步 驗(yàn)證Universal Links
驗(yàn)證方式找了兩種

  1. 備忘錄驗(yàn)證
    打開(kāi)備忘錄輸入https://help.wechat.com/app點(diǎn)擊會(huì)直接跳轉(zhuǎn)自己的app, 或者長(zhǎng)按會(huì)彈窗 在"app"中打開(kāi)
  2. Safari瀏覽器驗(yàn)證
    在瀏覽器中輸入https://help.wechat.com/app, 打開(kāi)網(wǎng)站后一定要下拉, 會(huì)有類(lèi)似這樣的彈窗, 點(diǎn)擊打開(kāi)會(huì)直接跳轉(zhuǎn)APP.
    Safari驗(yàn)證

第四步 微信配置Universal Links

  1. 微信要求填寫(xiě)格式是https開(kāi)頭,"/"結(jié)尾, 所以填寫(xiě)https://help.wechat.com/app/
    微信平臺(tái)
  2. AppDelegate配置
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 注冊(cè)
    [WXApi registerApp:kWXAppID universalLink:kUniversalLinks];
    // 測(cè)試函數(shù) step為WXULCheckStepFinal時(shí),表示檢測(cè)通過(guò),Universal Link接入成功
    [WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult * _Nonnull result) {
        NSLog(@"-> %ld %@",step, result);
    }];
}

// 通用鏈接會(huì)調(diào)用
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {
    if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
        NSURL *webpageURL = userActivity.webpageURL;
        if ([webpageURL.absoluteString isEqualToString:kUniversalLinks]) {
            // 如果UniversalLinks跳轉(zhuǎn) 會(huì)到這里
            NSLog(@"%@",webpageURL);
        } else {
            [[UIApplication sharedApplication]openURL:webpageURL];
        }
    }
    return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}

注意點(diǎn)

  1. 如果什么都配置正確了, 還是調(diào)不起app, 就把a(bǔ)pp刪除了重新安裝一下.
  2. 如果什么都配置正確了, 分享到其他app里面就不跳轉(zhuǎn)了, 是因?yàn)槲纯缬驅(qū)е碌? 如:分享到微信的鏈接是https://help.wechat.com/share.html, 然后該網(wǎng)頁(yè)中的“在app內(nèi)打開(kāi)”按鈕配置的通用鏈接為https://help.wechat.com/index.html.
    跨域的意思是說(shuō), 通用鏈接和調(diào)用通用鏈接的網(wǎng)頁(yè)不能是同一域名. 即如果通用鏈接域名為help.wechat.com, 則通用鏈接所處的網(wǎng)頁(yè)域名就不能是help.wechat.com。
  3. 如果所有都配置完成了, 微信分享登錄都可以, 但是還會(huì)出現(xiàn)"未驗(yàn)證應(yīng)用", 是因?yàn)槲打?yàn)證應(yīng)用名單非實(shí)時(shí)更新,只有前一天有接入新SDK(1.8.6版本以上)并且有正確調(diào)用記錄,第二天才會(huì)移除出名單, 并且前一天正確分享次數(shù)在10次以上.
  4. 添加測(cè)試函數(shù)checkUniversalLinkReady后,每次啟動(dòng)都會(huì)跳轉(zhuǎn)微信,然后再跳回app,注釋掉就不會(huì)再跳微信了。

微信接入文檔
未驗(yàn)證應(yīng)用排查文檔
蘋(píng)果官網(wǎng)Universal Links

如果對(duì)你有所幫助請(qǐng)點(diǎn)個(gè)贊唄??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容