使用Universal Links微信分享

微信分享流程

1 在蘋(píng)果開(kāi)發(fā)者中心配置
2 微信開(kāi)放中心設(shè)置
3 Xcode 設(shè)置
4 文件設(shè)置apple-app-site-association
5 代碼開(kāi)發(fā)

為了方便敘述挑随,設(shè)置幾個(gè)變量
通用鏈接: https://abc.def.com/ 
路徑Path :apps/
蘋(píng)果賬號(hào)的 TeamID :teamId
BundleId: com.hig.xyz

一 在蘋(píng)果開(kāi)發(fā)者中心配置

1 在蘋(píng)果開(kāi)發(fā)者中心申請(qǐng)bundleId時(shí)需要勾選 Associated domains汤徽,對(duì)于已經(jīng)申請(qǐng)過(guò)的證書(shū)需要重新申請(qǐng)

2 申請(qǐng)證書(shū)成功后,要記錄BundleID 和 TeamID粱年,在設(shè)置apple-app-site-association文件需要用到

二 微信設(shè)置

35101712886695_.pic.jpg

微信開(kāi)放平臺(tái) 創(chuàng)建移動(dòng)應(yīng)用填寫(xiě)信息填寫(xiě)
Bundle ID 一般和測(cè)試版本的Bundle ID寫(xiě)的一樣
Universal Links 應(yīng)該是 域名 + path

https://abc.def.com/apps/ 

/*其中  https://abc.def.com/ 是后臺(tái)給的域名, apps/是配置的path*/ 

應(yīng)用審核過(guò)之后會(huì)有WechatID 這個(gè)要用在開(kāi)發(fā)中

三 Xcode 設(shè)置

1 在安裝證書(shū)后隅俘,按照以下步驟可以設(shè)置 Associated domains


image.png

applinks和webcredentials 設(shè)置的值是一樣的

applinks:abc.def.com //這里設(shè)置的是通用鏈接取掉前面的 https://

2 設(shè)置Queried URL Schemes


image.png

3 設(shè)置URL Types


image.png

四 文件設(shè)置apple-app-site-association

{
    "applinks":{
        "apps":[],
        "details":[
            {
                "appID":"teamId.com.hig.xyz",///這里是teamId+.+bundleID
                "paths":["/apps/*"] ///因?yàn)槲⑿旁谠O(shè)置通用鏈接時(shí)最好加上Path,我們的設(shè)置了apps/*,如果不想設(shè)置 可以直接寫(xiě) ["*"]
            }
        ]
    }
}
  • 建好文件讓后臺(tái)把文件上傳到域名的根目錄下或者是根目錄下的.well-known 下,我們剛開(kāi)始放在根目錄下分享有問(wèn)題贷屎,在之后的修改中放到.well-known
  • APP 刪除谋币,重新運(yùn)行
  • 在safair 中輸入https://abc.def.com/apps/ 在頁(yè)面上可以出現(xiàn)APP的跳轉(zhuǎn)

五 Xcode開(kāi)發(fā)

1 在 pod 文件引入

 pod 'WechatOpenSDK-XCFramework'

2 在AppDelegate和SceneDelegate 加入以下代碼

// 在AppDelegate的didFinishLaunchingWithOptions 方法注冊(cè) 微信
//WeChatAppID 是微信開(kāi)放平臺(tái)給的  
//WXUniversalLinks 和 微信開(kāi)放平臺(tái)移動(dòng)應(yīng)用Universal Links一致
    //在register之前打開(kāi)log, 后續(xù)可以根據(jù)log排查問(wèn)題
    [WXApi startLogByLevel:WXLogLevelDetail logBlock:^(NSString *log) {
        NSLog(@"WeChatSDK: %@", log);
    }];
    [WXApi registerApp:WeChatAppID universalLink:WXUniversalLinks];
    
    //調(diào)用自檢函數(shù)
    [WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult* result) {
        //WXULCheckStepFinal
        NSLog(@"WXApi===自檢函數(shù):編號(hào): %@ ,執(zhí)行結(jié)果: %u ,當(dāng)前錯(cuò)誤信息: %@ ,修正建議: %@", @(step), result.success, result.errorInfo, result.suggestion);
    }];

//還要重寫(xiě)一下方法
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    NSLog(@"handleOpenURL");
    return  [WXApi handleOpenURL:url delegate:self];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    NSLog(@"sourceApplication");
    return [WXApi handleOpenURL:url delegate:self];
}
//在SceneDelegate的重寫(xiě)這幾個(gè)方法 并實(shí)現(xiàn)WXApiDelegate返回的方法
-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler{
    NSLog(@"application  continueUserActivity");
    return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}
- (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity  API_AVAILABLE(ios(13.0)){
    
    NSLog(@"scene  continueUserActivity");
    [WXApi handleOpenUniversalLink:userActivity delegate:self];
}


#pragma mark - WXDelegate 微信分享/登錄/支付方法回調(diào)
- (void)onResp:(BaseResp*)resp{
    NSLog(@"resp22 ===%d, %@,%d",resp.type,resp.errStr,resp.errCode);
    // 1.分享后回調(diào)類(lèi)
    if([resp isKindOfClass:[SendMessageToWXResp class]]){
        if (resp.errCode == 0) {
            WQKAlertWithMessage(@"分享成功", 1.5)
        }else{
            WQKAlertWithMessage(@"分享失敗", 1.5)
        }
    }
    // 2.微信登錄向微信請(qǐng)求授權(quán)回調(diào)類(lèi)
    if ([resp isKindOfClass:[SendAuthResp class]]){
        if (resp.errCode == 0) {
            //成功
        }else{
            WQKAlertWithMessage(@"授權(quán)失敗", 1.5)
        }
    }
    // 3.支付后回調(diào)類(lèi)
    if ([resp isKindOfClass:[PayResp class]]){
        
    }
}

APP啟動(dòng)時(shí)checkUniversalLinkReady函數(shù)可以走完7步,說(shuō)明分享接入成功

3 在需要分享的位置 調(diào)微信的分享方法 我們是網(wǎng)頁(yè)分享所以只寫(xiě)了這個(gè)方法

WXMediaMessage *message = [WXMediaMessage message];
    message.title = shareTitle;
    message.description = @"xxxx";
    [message setThumbImage:[UIImage imageNamed:@"shareIcon"]];
    
    WXWebpageObject *webpageObject = [WXWebpageObject object];
    webpageObject.webpageUrl = shareUrl;
    message.mediaObject = webpageObject;
    SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
    req.bText = NO;
    req.message = message;
    req.scene = platformType;
    [WXApi sendReq:req completion:^(BOOL success) {
    
    }];

微信分享遇到的問(wèn)題:

1 使用自檢函數(shù)在分享的時(shí)候一直無(wú)法打開(kāi)微信分享的頁(yè)面

控制臺(tái)日志


image.png

-> 重新檢查

//APP啟動(dòng)時(shí)只能運(yùn)行5步斋射,啟動(dòng)流程app ->微信->app 沒(méi)有后續(xù)
wxlog:using sdk:pod--
wxlog:set property list
wxlog:launch app with ul only success
wxlog:Successfully starting WeChat with the universal link.
WXApi=== 0 ,執(zhí)行結(jié)果: 1 ,當(dāng)前錯(cuò)誤信息: check passed ,修正建議:
WXApi===1 ,執(zhí)行結(jié)果: 1 ,當(dāng)前錯(cuò)誤信息: check passed ,修正建議: 
WXApi===2 ,執(zhí)行結(jié)果: 1 ,當(dāng)前錯(cuò)誤信息: check passed ,修正建議: 
WXApi===3 ,執(zhí)行結(jié)果: 1 ,當(dāng)前錯(cuò)誤信息: check passed ,修正建議: 
WXApi===4 ,執(zhí)行結(jié)果: 1 ,當(dāng)前錯(cuò)誤信息: check passed ,修正建議: 

->參考微信開(kāi)發(fā)文檔 一步一步按照開(kāi)發(fā)文檔 對(duì)照修改

//在SceneDelegate.m添加以下方法
-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler{
    NSLog(@"application  continueUserActivity");
    return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}
- (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity  API_AVAILABLE(ios(13.0)){
    
    NSLog(@"scene  continueUserActivity");
    [WXApi handleOpenUniversalLink:userActivity delegate:self];
}
//在AppDelegate.m添加以下方法
#pragma mark ---Universal Link回調(diào)
//-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler{
//    NSLog(@"continueUserActivity");
//    return [WXApi handleOpenUniversalLink:userActivity delegate:self];
//}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    NSLog(@"handleOpenURL");
    return  [WXApi handleOpenURL:url delegate:self];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    NSLog(@"sourceApplication");
    return [WXApi handleOpenURL:url delegate:self];
}

2 微信分享時(shí)遇到的問(wèn)題

image.png

-> 檢查后的修改

//req.scene 之前寫(xiě)死了寫(xiě)的1 分享不了
    WXMediaMessage *message = [WXMediaMessage message];
    message.title = shareTitle;
    message.description = @"XXXXXX";
    [message setThumbImage:[UIImage imageNamed:@"shareIcon"]];
    
    WXWebpageObject *webpageObject = [WXWebpageObject object];
    webpageObject.webpageUrl = shareUrl;
    message.mediaObject = webpageObject;
    SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
    req.bText = NO;
    req.message = message;
    req.scene = platformType; //好友 WXSceneSession/朋友圈WXSceneTimeline
    [WXApi sendReq:req completion:^(BOOL success) {
    
    }];

3 微信分享跳轉(zhuǎn)到微信育勺,取消分享跳轉(zhuǎn)到APP還是分享成功,取消分享和分享成功的返回信息是一樣的(未解決)

參考文檔:(微信開(kāi)放平臺(tái))
https://developers.weixin.qq.com/doc/oplatform/Mobile_App/guideline/create.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绩鸣,一起剝皮案震驚了整個(gè)濱河市怀大,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呀闻,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件潜慎,死亡現(xiàn)場(chǎng)離奇詭異捡多,居然都是意外死亡蓖康,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)垒手,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蒜焊,“玉大人,你說(shuō)我怎么就攤上這事科贬∮景穑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵榜掌,是天一觀的道長(zhǎng)优妙。 經(jīng)常有香客問(wèn)我,道長(zhǎng)憎账,這世上最難降的妖魔是什么套硼? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮胞皱,結(jié)果婚禮上邪意,老公的妹妹穿的比我還像新娘。我一直安慰自己反砌,他們只是感情好雾鬼,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著宴树,像睡著了一般策菜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上森渐,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天做入,我揣著相機(jī)與錄音,去河邊找鬼同衣。 笑死竟块,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的耐齐。 我是一名探鬼主播浪秘,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼埠况!你這毒婦竟也來(lái)了耸携?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤辕翰,失蹤者是張志新(化名)和其女友劉穎夺衍,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體喜命,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沟沙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年河劝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矛紫。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赎瞎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颊咬,到底是詐尸還是另有隱情务甥,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布喳篇,位于F島的核電站敞临,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏杭隙。R本人自食惡果不足惜哟绊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望痰憎。 院中可真熱鬧票髓,春花似錦、人聲如沸铣耘。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蜗细。三九已至裆操,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間炉媒,已是汗流浹背踪区。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吊骤,地道東北人缎岗。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像白粉,于是被迫代替她去往敵國(guó)和親传泊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容