傳送門:
Demo源碼
Universal Links配置方法
蘋果Universal Links官方文檔
微信開發(fā)平臺文檔
微信授權(quán)登錄
微信分享
配置要求:
- openSDK版本: 1.8.6或以上
- 手機微信版本: 7.0.7或以上
本文從配置微信開放平臺這一步開始,在這之前需要先配置Universal Links
第一步:配置微信開發(fā)平臺
到微信開發(fā)平臺的“管理中心”里跑芳,更新你的iOS移動應(yīng)用:
-
查看詳情,找到開發(fā)者信息一欄瓷胧,點擊右上角的“修改”按鈕唧瘾;
- 修改Universal Links路徑,要求https開頭,以“/”結(jié)尾揩页,
注意,這里的Universal Links需要配合服務(wù)端的apple-app-site-association文件使用
這里很多帖子包括微信的開發(fā)指南中說的都很模糊烹俗,這里附上:Universal Links詳細(xì)的配置方法)
- 保存碍沐,并記錄這里的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)
-
配置URL Scheme,當(dāng)分享結(jié)束后從微信回到原生App是通過URL Scheme跳轉(zhuǎn)的衷蜓,這里要使用從步驟四中從微信開發(fā)平臺獲取的AppID ,打開Xcode選擇project → Info → URL Types → 新增一個尘喝,Identifier填
weixin
URL Schemes填A(yù)ppID
-
配置Info.plist磁浇,在LSApplicationQueriesSchemes下新增兩個字段:
weixin
和weixinULAPI
當(dāng)然,如果你使用的API所在服務(wù)器不支持http朽褪,還需要加上App Transport Security Settings
代碼部分置吓,這里需要用到這里要使用從步驟四中從微信開發(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)境包前記得刪除
- 真機測試,檢查手機上安裝的微信版本(需要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ù)問題
- 如果上面自檢函數(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é)的流程圖:
如果本文對你有所幫助記得點個贊哈:)