傳送門:
Demo源碼
Universal Links配置方法
蘋果Universal Links官方文檔
微信開發平臺文檔
微信授權登錄
微信分享
配置要求:
- openSDK版本: 1.8.6或以上
- 手機微信版本: 7.0.7或以上
本文從配置微信開放平臺這一步開始,在這之前需要先配置Universal Links
第一步:配置微信開發平臺
到微信開發平臺的“管理中心”里,更新你的iOS移動應用:
-
查看詳情,找到開發者信息一欄,點擊右上角的“修改”按鈕;
微信開發平臺截圖.png - 修改Universal Links路徑,要求https開頭,以“/”結尾,
注意,這里的Universal Links需要配合服務端的apple-app-site-association文件使用
這里很多帖子包括微信的開發指南中說的都很模糊,這里附上:Universal Links詳細的配置方法)
- 保存,并記錄這里的AppID和Universal Links備用
第二步:集成微信openSDK
將微信提供的openSDK(版本1.8.6或以上)下載并集成到你的工程內(詳細過程查看iOS接入指南:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html)
-
配置URL Scheme,當分享結束后從微信回到原生App是通過URL Scheme跳轉的,這里要使用從步驟四中從微信開發平臺獲取的AppID ,打開Xcode選擇project → Info → URL Types → 新增一個,Identifier填
weixin
URL Schemes填AppID
Xcode配置3.png -
配置Info.plist,在LSApplicationQueriesSchemes下新增兩個字段:
weixin
和weixinULAPI
Xcode配置4.png
當然,如果你使用的API所在服務器不支持http,還需要加上App Transport Security Settings
代碼部分,這里需要用到這里要使用從步驟四中從微信開發平臺獲取的App ID和Universal Links,在AppDelegate.m中實現如下代碼:
#import "AppDelegate.h"
#import "WXApi.h"
#warning 注意修改WXAppId和WXUniversalLink為當前App對應在微信開放平臺的配置
#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(@"初始化成功");
//自檢函數
[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]]){//微信回調
SendMessageToWXResp *response = (SendMessageToWXResp *)resp;
if(response.errCode == WXSuccess){
//目前分享回調只會走成功
}
}else if([resp isKindOfClass:[SendAuthResp class]]){//判斷是否為授權登錄類
SendAuthResp *req = (SendAuthResp *)resp;
if([req.state isEqualToString:@"wx_oauth_authorization_state"]){//微信授權成功
}
}else if ([resp isKindOfClass:[WXLaunchMiniProgramResp class]]){
WXLaunchMiniProgramResp *req = (WXLaunchMiniProgramResp *)resp;
NSString *string = req.msg; // 對應JsApi navigateBackApplication中的extraData字段數據
}
}
@end
如果是在debug模式下真機調試,建議打開WXApi
提供的log函數和自檢函數,方便查看具體問題所在,但是后面打生產環境包前記得刪除
- 真機測試,檢查手機上安裝的微信版本(需要7.0.7或以上),如果你在上面代碼部分實現了自檢函數
[WXApi checkUniversalLinkReady:block];
運行啟動registerApp初始化通過后會主動拉起微信進行檢查
WXULCheckStep值說明:
(1) step = WXULCheckStepParams: 參數檢查
(2) step = WXULCheckStepSystemVersion: 當前系統版本檢查
(3) step = WXULCheckStepWechatVersion: 微信客戶端版本檢查
(4) step = WXULCheckStepSDKInnerOperation: 微信SDK內部操作檢查
(5) step = WXULCheckStepLaunchWechat: App拉起微信檢查
(6) step = WXULCheckStepBackToCurrentApp: 由微信返回當前App檢查
(7) step = WXULCheckStepFinal: 最終檢查
自檢函數會依次回調這7個step,當回調了WXULCheckStepFinal,說明檢測通過,SDK接入成功。 任一step回調的result.success為NO, 流程終止,后續不再回調,可以根據result.errorInfo的查看當前步驟錯誤的原因,根據result.suggestion修復問題
- 如果上面自檢函數步驟全檢測通過那距離大功告成就已經不遠了,發起分享:
if([WXApi isWXAppInstalled]){//判斷當前設備是否安裝微信客戶端
//創建多媒體消息結構體
WXMediaMessage *message = [WXMediaMessage message];
message.title = @"【爆款直降 盛夏特惠】【29.9免郵 限量買3免1】清新持久自然GUCCMI香水";//標題
message.description = @"我在京東發現了一個不錯的商品,趕快來看看吧。";//描述
[message setThumbImage:[UIImage imageNamed:@"res2.png"]];//設置預覽圖
//創建網頁數據對象
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;//分享到好友會話
//發送分享信息
[WXApi sendReq:sendReq completion:^(BOOL success) {
NSLog(@"喚起微信:%@", success ? @"成功" : @"失敗");
}];
}else{
//未安裝微信應用或版本過低
}
當開發者的App發起分享時,微信SDK會校驗Universal Links是否匹配,使用新版本SDK發起分享時,會出現如下圖所示交互過程:從App拉起微信-出現“正在連接”頁面-返回App-重新打開微信,這是新的安全驗證流程,每個用戶在首次使用時會出現上述跳轉,理論上該過程只會出現一次,若同一用戶發起分享多次都出現該跳轉,則需要檢查上面各步驟是否配置正確,下面附上我自己總結的流程圖:
如果本文對你有所幫助記得點個贊哈:)