iOS微信授權登錄集成


https://blog.csdn.net/u014084081/article/details/80857200

iOS微信授權登錄集成

iOS微信授權登錄集成,具體的過程參考官方的文檔

微信集成官方Demo地址: iOS資源下載

不錯的文章:

准備工作

1.向微信注冊你的應用程序id

開發者在微信開發平台,開發者應用登記頁面 進行登記,登記並選擇移動應用進行設置后,將獲得AppID,可立即用於開發

2.下載載微信終端SDK文件

可在 iOS資源下載處下載 
SDK文件

3.添加依賴的庫

  • SystemConfiguration.framework,
  • libz.dylib
  • libsqlite3.0.dylib
  • libc++.dylib
  • Security.framework
  • CoreTelephony.framework
  • CFNetwork.framework

4.添加URL Type

選中“TARGETS”一欄,在“info”標簽欄的“URL type“添加“URL scheme”為你所注冊的應用程序id

URL scheme

5.添加URL Schemes白名單

在Xcode中,選擇你的工程設置項,選中“TARGETS”一欄,在“info”標簽欄的“LSApplicationQueriesSchemes“添加weixin 
添加URL Schemes白名單

集成

在 AppDelegate 的 didFinishLaunchingWithOptions 函數中向微信注冊id

//向微信注冊
[WXApi registerApp:@"wxd930ea5d5a258f4f" enableMTA:YES];
1
2
2.重寫AppDelegate的handleOpenURL和openURL方法

官方Demo實現的效果如下:

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

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}
1
2
3
4
5
6
7
這2個方法在文檔中是這樣解釋的:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url NS_DEPRECATED_IOS(2_0, 9_0, "Please use application:openURL:options:") __TVOS_PROHIBITED;

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation NS_DEPRECATED_IOS(4_2, 9_0, "Please use application:openURL:options:") __TVOS_PROHIBITED;
1
2
3
表示都已廢棄,並且推薦使用如下的方法,iOS9.0以后有效:

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options NS_AVAILABLE_IOS(9_0); // no equiv. notification. return NO if the application can't open for some reason
1
當用戶通過其它應用啟動本應用時,會回調這個方法,url參數是其它應用調用openURL:方法時傳過來的
上面的3個方法作用其實都是一樣的,只是參數不同而已,函數的返回值是BOOL官方文檔的解釋是:

YES if the delegate successfully handled the request or NO if the attempt to open the URL resource failed.
如果代理成功的處理了請求,則返回YES,如果打開URL資源失敗了,則返回NO
對於這種URL Schemes調用,可參考:

IOS的軟件之間的調用(URL Schemes)
iOS中的URL Scheme
3.向微信請求授權

官方Demo對請求進行了封裝,如下:

//微信授權登錄
- (void)sendAuthRequest {
[WXApiRequestHandler sendAuthRequestScope: kAuthScope
State:kAuthState
OpenID:kAuthOpenID
InViewController:self];
}

該方法其內部實現為:

+ (BOOL)sendAuthRequestScope:(NSString *)scope
State:(NSString *)state
OpenID:(NSString *)openID
InViewController:(UIViewController *)viewController {
SendAuthReq* req = [[SendAuthReq alloc] init];
req.scope = scope; // @"post_timeline,sns"
req.state = state;
req.openID = openID;

return [WXApi sendAuthReq:req
viewController:viewController
delegate:[WXApiManager sharedManager]];
}

創建了SendAuthReq對象,其:

scope - 必須,應用授權作用域,如獲取用戶個人信息則填寫snsapi_userinfo
state - 非必須,用於保持請求和回調的狀態,授權請求后原樣帶回給第三方。該參數可用於防止csrf攻擊(跨站請求偽造攻擊),建議第三方帶上該參數,可設置為簡單的隨機數加session進行校驗
appid - 必須,應用唯一標識,在微信開放平台提交應用審核通過后獲得
參考移動應用微信登錄開發指南

第三方向微信終端發送一個SendAuthReq消息結構,如[WXApi sendReq:req];,可拉起微信打開授權登錄頁:

微信打開授權登錄頁

用戶點擊授權后,微信客戶端會被拉起,跳轉至授權界面,用戶在該界面點擊允許或取消,SDK通過SendAuthResp返回數據給調用方

在官方的Demo中,WXApiManager中實現了WXApiDelegate- (void)onResp:(BaseResp *)resp方法和- (void)onReq:(BaseReq *)req方法

resp

在控制器中的managerDidRecvAuthResponse:方法處理響應

 

- (void)managerDidRecvAuthResponse:(SendAuthResp *)response {
NSString *strTitle = [NSString stringWithFormat:@"Auth結果"];
NSString *strMsg = [NSString stringWithFormat:@"code:%@,state:%@,errcode:%d", response.code, response.state, response.errCode];

[UIAlertView showWithTitle:strTitle message:strMsg sure:nil];
}

返回的數據,解釋如下:

響應數據解釋

獲取到code后,就可以通過code獲取access_tokenopenid,然后通過access_tokenopenid就可以獲取用戶個人信息了,這是在服務端做處理的,具體可參考移動應用微信登錄開發指南

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM