iOS 微信openSDK使用Universal Links填坑

傳送門:
Demo源碼
Universal Links配置方法
蘋果Universal Links官方文檔
微信開發(fā)平臺文檔
微信授權(quán)登錄
微信分享

配置要求:

  1. openSDK版本: 1.8.6或以上
  2. 手機微信版本: 7.0.7或以上

本文從配置微信開放平臺這一步開始,在這之前需要先配置Universal Links

第一步:配置微信開發(fā)平臺

到微信開發(fā)平臺的“管理中心”里跑芳,更新你的iOS移動應(yīng)用:

  1. 查看詳情,找到開發(fā)者信息一欄瓷胧,點擊右上角的“修改”按鈕唧瘾;


    微信開發(fā)平臺截圖.png
  2. 修改Universal Links路徑,要求https開頭,以“/”結(jié)尾揩页,
    注意,這里的Universal Links需要配合服務(wù)端的apple-app-site-association文件使用

https://www.baidu.com/wx_conn/wxc59ee02301029db6/

這里很多帖子包括微信的開發(fā)指南中說的都很模糊烹俗,這里附上:Universal Links詳細(xì)的配置方法

  1. 保存碍沐,并記錄這里的AppID和Universal Links備用

第二步:集成微信openSDK

將微信提供的openSDK(版本1.8.6或以上)下載并集成到你的工程內(nèi)(詳細(xì)過程查看iOS接入指南:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html

  1. 配置URL Scheme,當(dāng)分享結(jié)束后從微信回到原生App是通過URL Scheme跳轉(zhuǎn)的衷蜓,這里要使用從步驟四中從微信開發(fā)平臺獲取的AppID ,打開Xcode選擇project → Info → URL Types → 新增一個尘喝,Identifier填weixin URL Schemes填A(yù)ppID

    Xcode配置3.png

  2. 配置Info.plist磁浇,在LSApplicationQueriesSchemes下新增兩個字段:weixinweixinULAPI

    Xcode配置4.png

    當(dāng)然,如果你使用的API所在服務(wù)器不支持http朽褪,還需要加上App Transport Security Settings

  3. 代碼部分置吓,這里需要用到這里要使用從步驟四中從微信開發(fā)平臺獲取的App ID和Universal Links无虚,在AppDelegate.m中實現(xiàn)如下代碼:

#import "AppDelegate.h"
#import "WXApi.h"

#warning 注意修改WXAppId和WXUniversalLink為當(dāng)前App對應(yīng)在微信開放平臺的配置
#define WXAppId @"wx123456789"http://TODO:注意修改
#define WXUniversalLink @"https://www.wechat.com/wx_conn/app/"http://TODO:注意修改

@interface AppDelegate ()<WXApiDelegate>

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
    [WXApi startLogByLevel:WXLogLevelDetail logBlock:^(NSString * _Nonnull log) {
        NSLog(@"%@", log);
    }];

    if([WXApi registerApp:WXAppId universalLink:WXUniversalLink]){
        NSLog(@"初始化成功");

        //自檢函數(shù)
        [WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult* result) {
            NSLog(@"%@, %u, %@, %@", @(step), result.success, result.errorInfo, result.suggestion);
        }];
    }
    
    return YES;
}

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

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

#pragma mark - Universal Link
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {
    
    return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}

#pragma mark - WXApiDelegate
- (void)onResp:(id)resp{

    if([resp isKindOfClass:[SendMessageToWXResp class]]){//微信回調(diào)
        
        SendMessageToWXResp *response = (SendMessageToWXResp *)resp;

        if(response.errCode == WXSuccess){
            //目前分享回調(diào)只會走成功
        }
    }else if([resp isKindOfClass:[SendAuthResp class]]){//判斷是否為授權(quán)登錄類

        SendAuthResp *req = (SendAuthResp *)resp;
        if([req.state isEqualToString:@"wx_oauth_authorization_state"]){//微信授權(quán)成功

        }
    }else if ([resp isKindOfClass:[WXLaunchMiniProgramResp class]]){
        
        WXLaunchMiniProgramResp *req = (WXLaunchMiniProgramResp *)resp;
        NSString *string = req.msg; // 對應(yīng)JsApi navigateBackApplication中的extraData字段數(shù)據(jù)
    }
}

@end

如果是在debug模式下真機調(diào)試,建議打開WXApi提供的log函數(shù)和自檢函數(shù)衍锚,方便查看具體問題所在友题,但是后面打生產(chǎn)環(huán)境包前記得刪除

  1. 真機測試,檢查手機上安裝的微信版本(需要7.0.7或以上)戴质,如果你在上面代碼部分實現(xiàn)了自檢函數(shù)[WXApi checkUniversalLinkReady:block];運行啟動registerApp初始化通過后會主動拉起微信進(jìn)行檢查

WXULCheckStep值說明:
(1) step = WXULCheckStepParams: 參數(shù)檢查
(2) step = WXULCheckStepSystemVersion: 當(dāng)前系統(tǒng)版本檢查
(3) step = WXULCheckStepWechatVersion: 微信客戶端版本檢查
(4) step = WXULCheckStepSDKInnerOperation: 微信SDK內(nèi)部操作檢查
(5) step = WXULCheckStepLaunchWechat: App拉起微信檢查
(6) step = WXULCheckStepBackToCurrentApp: 由微信返回當(dāng)前App檢查
(7) step = WXULCheckStepFinal: 最終檢查

自檢函數(shù)會依次回調(diào)這7個step度宦,當(dāng)回調(diào)了WXULCheckStepFinal,說明檢測通過告匠,SDK接入成功戈抄。 任一step回調(diào)的result.success為NO, 流程終止,后續(xù)不再回調(diào)后专,可以根據(jù)result.errorInfo的查看當(dāng)前步驟錯誤的原因划鸽,根據(jù)result.suggestion修復(fù)問題

  1. 如果上面自檢函數(shù)步驟全檢測通過那距離大功告成就已經(jīng)不遠(yuǎn)了,發(fā)起分享:
if([WXApi isWXAppInstalled]){//判斷當(dāng)前設(shè)備是否安裝微信客戶端

    //創(chuàng)建多媒體消息結(jié)構(gòu)體
    WXMediaMessage *message = [WXMediaMessage message];
    message.title = @"【爆款直降 盛夏特惠】【29.9免郵 限量買3免1】清新持久自然GUCCMI香水";//標(biāo)題
    message.description = @"我在京東發(fā)現(xiàn)了一個不錯的商品戚哎,趕快來看看吧裸诽。";//描述
    [message setThumbImage:[UIImage imageNamed:@"res2.png"]];//設(shè)置預(yù)覽圖

    //創(chuàng)建網(wǎng)頁數(shù)據(jù)對象
    WXWebpageObject *webObj = [WXWebpageObject object];
    webObj.webpageUrl = @"[https://open.weixin.qq.com](https://open.weixin.qq.com)";//鏈接
    message.mediaObject = webObj;

    SendMessageToWXReq *sendReq = [[SendMessageToWXReq alloc] init];
    sendReq.bText = NO;//不使用文本信息
    sendReq.message = message;
    sendReq.scene = WXSceneSession;//分享到好友會話
    //發(fā)送分享信息
    [WXApi sendReq:sendReq completion:^(BOOL success) {
        NSLog(@"喚起微信:%@", success ? @"成功" : @"失敗");
    }];
}else{

    //未安裝微信應(yīng)用或版本過低
}

當(dāng)開發(fā)者的App發(fā)起分享時,微信SDK會校驗Universal Links是否匹配型凳,使用新版本SDK發(fā)起分享時丈冬,會出現(xiàn)如下圖所示交互過程:從App拉起微信-出現(xiàn)“正在連接”頁面-返回App-重新打開微信,這是新的安全驗證流程啰脚,每個用戶在首次使用時會出現(xiàn)上述跳轉(zhuǎn)殷蛇,理論上該過程只會出現(xiàn)一次,若同一用戶發(fā)起分享多次都出現(xiàn)該跳轉(zhuǎn)橄浓,則需要檢查上面各步驟是否配置正確粒梦,下面附上我自己總結(jié)的流程圖:

安全驗證流程圖.jpg

如果本文對你有所幫助記得點個贊哈:)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市荸实,隨后出現(xiàn)的幾起案子匀们,更是在濱河造成了極大的恐慌,老刑警劉巖准给,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泄朴,死亡現(xiàn)場離奇詭異,居然都是意外死亡露氮,警方通過查閱死者的電腦和手機祖灰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畔规,“玉大人局扶,你說我怎么就攤上這事。” “怎么了三妈?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵畜埋,是天一觀的道長。 經(jīng)常有香客問我畴蒲,道長悠鞍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任模燥,我火速辦了婚禮咖祭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涧窒。我一直安慰自己心肪,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布纠吴。 她就那樣靜靜地躺著硬鞍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪戴已。 梳的紋絲不亂的頭發(fā)上固该,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音糖儡,去河邊找鬼伐坏。 笑死,一個胖子當(dāng)著我的面吹牛握联,可吹牛的內(nèi)容都是我干的桦沉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼金闽,長吁一口氣:“原來是場噩夢啊……” “哼纯露!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起代芜,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤埠褪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后挤庇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钞速,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年嫡秕,在試婚紗的時候發(fā)現(xiàn)自己被綠了渴语。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡昆咽,死狀恐怖驾凶,靈堂內(nèi)的尸體忽然破棺而出屠升,到底是詐尸還是另有隱情,我是刑警寧澤狭郑,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站汇在,受9級特大地震影響翰萨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜糕殉,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一亩鬼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧阿蝶,春花似錦雳锋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至筑煮,卻和暖如春辛蚊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背真仲。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工袋马, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秸应。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓虑凛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親软啼。 傳聞我的和親對象是個殘疾皇子桑谍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344