bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

ios開發第三方登錄,ios開發登錄功能實現

iOS開發--使用友盟快速分享與第三方登錄注意事項

官方說的比較詳細,但是就是有些重復,而且有很多坑

10年積累的成都網站建設、網站制作經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站設計后付款的網站建設流程,更有信宜免費網站建設讓你可以放心的選擇與我們合作。

在info.plist中加入安全域名白名單(右鍵info.plist用source code打開)

在info.plist的NSAppTransportSecurity下新增NSAllowsArbitraryLoads并設置為YES,指定所有HTTP連接都可正常請求

打開app,用第三方登錄,發現沒有sso授權頁面,或打開QQ失敗、微信失敗、微博失敗等

info.plist增加:

在iOS9下就需要增加一個可跳轉的白名單,指定對應跳轉App的URL Scheme,否則將在第三方平臺判斷是否跳轉時用到的canOpenURL時返回NO,進而只進行webview授權或授權/分享失敗。

iOS. 通過appleId進行蘋果第三方登錄

2020年4月后,有第三方平臺登錄的app必須有蘋果的第三方登錄

開發者賬號的app綁定的identifiers 中選中

在Xcode 中的

添加

在登錄界面添加?#import?AuthenticationServices/AuthenticationServices.h

if ( @available (iOS13.0, *)) {

? ? // Sign In With Apple Button

? ? ASAuthorizationAppleIDButton *appleIDBtn = [ASAuthorizationAppleIDButton buttonWithType:ASAuthorizationAppleIDButtonTypeDefault style:ASAuthorizationAppleIDButtonStyleWhite];

? ? appleIDBtn.frame=? CGRectMake(50,100,100,40);

? ? appleIDBtn.layer.cornerRadius=5;

? ? appleIDBtn.layer.masksToBounds= YES ;

? ? [appleIDBtnaddTarget: self action: @selector (handleAuthorizationAppleIDButtonPress)forControlEvents:UIControlEventTouchUpInside];

? ? [self.view addSubview:appleIDBtn];

}

//蘋果第三方登錄

-( void )handleAuthorizationAppleIDButtonPress{

if ( @available (iOS13.0, *)) {

? ? // 基于用戶的Apple ID授權用戶,生成用戶授權請求的一種機制

? ? ASAuthorizationAppleIDProvider *appleIDProvider = [[ASAuthorizationAppleIDProvider alloc] init];

? ? // 創建新的AppleID 授權請求

? ? ASAuthorizationAppleIDRequest*appleIDRequest = [appleIDProvidercreateRequest];

? ? // 在用戶授權期間請求的聯系信息

? ? appleIDRequest.requestedScopes = @[ASAuthorizationScopeFullName, ASAuthorizationScopeEmail];

? ? // 由ASAuthorizationAppleIDProvider創建的授權請求 管理授權請求的控制器

? ? ASAuthorizationController*authorizationController = [[ASAuthorizationControlleralloc]initWithAuthorizationRequests:@[appleIDRequest]];

? ? // 設置授權控制器通知授權請求的成功與失敗的代理

? ? authorizationController.delegate= self ;

? ? // 設置提供 展示上下文的代理,在這個上下文中 系統可以展示授權界面給用戶

? ? authorizationController.presentationContextProvider= self ;

? ? // 在控制器初始化期間啟動授權流

? ? [authorizationControllerperformRequests];

}

}

// 如果存在iCloud Keychain 憑證或者AppleID 憑證提示用戶 ?

//這個方法在viewDidAppear里添加

- ( void )perfomExistingAccountSetupFlows{

NSLog(@"http:///已經認證過了/////");

if ( @available (iOS13.0, *)) {

? ? // 基于用戶的Apple ID授權用戶,生成用戶授權請求的一種機制

? ? ASAuthorizationAppleIDProvider *appleIDProvider = [[ASAuthorizationAppleIDProvider alloc] init];

? ? // 授權請求AppleID

? ? ASAuthorizationAppleIDRequest*appleIDRequest = [appleIDProvidercreateRequest];

? ? // 為了執行鑰匙串憑證分享生成請求的一種機制

? ? ASAuthorizationPasswordProvider *passwordProvider = [[ASAuthorizationPasswordProvider alloc] init];

? ? ASAuthorizationPasswordRequest*passwordRequest = [passwordProvidercreateRequest];

? ? // 由ASAuthorizationAppleIDProvider創建的授權請求 管理授權請求的控制器

? ? ASAuthorizationController*authorizationController = [[ASAuthorizationControlleralloc]initWithAuthorizationRequests:@[appleIDRequest, passwordRequest]];

? ? // 設置授權控制器通知授權請求的成功與失敗的代理

? ? authorizationController.delegate= self ;

? ? // 設置提供 展示上下文的代理,在這個上下文中 系統可以展示授權界面給用戶

? ? authorizationController.presentationContextProvider= self ;

? ? // 在控制器初始化期間啟動授權流

? ? [authorizationControllerperformRequests];

}

}

#pragma mark - delegate

//@optional 授權成功地回調

- ( void )authorizationController:(ASAuthorizationController *)controller didCompleteWithAuthorization:(ASAuthorization *)authorization{

NSLog(@"授權完成:::%@", authorization.credential);

NSLog(@"%s", __FUNCTION__ );

NSLog(@"%@", controller);

NSLog(@"%@", authorization);

// 測試配置UI顯示

NSMutableString *mStr = [NSMutableString string];

if ([authorization.credential isKindOfClass:[ASAuthorizationAppleIDCredential class]]) {

? ? // 用戶登錄使用ASAuthorizationAppleIDCredential

? ? ASAuthorizationAppleIDCredential*appleIDCredential = authorization.credential;

? ? NSString*user = appleIDCredential.user;

? ? NSString*familyName = appleIDCredential.fullName.familyName;

? ? NSString*givenName = appleIDCredential.fullName.givenName;

? ? NSString*email = appleIDCredential.email;

? NSString *authorizationCode = [[NSString alloc] initWithData:appleIDCredential.authorizationCode encoding:NSUTF8StringEncoding]; // refresh token

? ? NSString *identityToken = [[NSString alloc] initWithData:appleIDCredential.identityToken encoding:NSUTF8StringEncoding]; // access token

? ? ASUserDetectionStatusrealUserStatus = appleIDCredential.realUserStatus;

//? ? ? ? NSData *identityToken = appleIDCredential.identityToken;

//? ? ? ? NSData *authorizationCode = appleIDCredential.authorizationCode;

? ? // Create an account in your system.

? ? // For the purpose of this demo app, store the userIdentifier in the keychain.

? ? //? 需要使用鑰匙串的方式保存用戶的唯一信息

//? ? ? ? [mStr appendString:user];

//? ? ? ? [mStr appendString:@"\n"];

//? ? ? ? [mStr appendString:familyName];

//? ? ? ? [mStr appendString:@"\n"];

//? ? ? ? [mStr appendString:givenName];

//? ? ? ? [mStr appendString:@"\n"];

//? ? ? ? [mStr appendString:email];

//? ? ? ? NSLog(@"mStr:::%@", mStr);

//? ? ? ? [mStr appendString:@"\n"];

} else if ([authorization.credentialisKindOfClass:[ASPasswordCredentialclass]]){

? ? // Sign in using an existing iCloud Keychain credential.

? ? // 用戶登錄使用現有的密碼憑證

? ? ASPasswordCredential*passwordCredential = authorization.credential;

? ? // 密碼憑證對象的用戶標識 用戶的唯一標識

? ? NSString*user = passwordCredential.user;

? ? // 密碼憑證對象的密碼

? ? NSString*password = passwordCredential.password;

? ? [mStrappendString:user];

? ? [mStrappendString:@"\n"];

? ? [mStrappendString:password];

? ? [mStrappendString:@"\n"];

? ? NSLog(@"mStr:::%@", mStr);

} else {

? ? NSLog(@"授權信息均不符");

? ? mStr = [@"授權信息均不符"copy];

}

}

// 授權失敗的回調

- ( void )authorizationController:(ASAuthorizationController *)controller didCompleteWithError:(NSError *)error{

// Handle error.

NSLog(@"Handle error:%@", error);

NSString*errorMsg = nil ;

switch (error.code) {

? ? case ASAuthorizationErrorCanceled:

? ? ? ? errorMsg =@"用戶取消了授權請求";

? ? ? ? break ;

? ? case ASAuthorizationErrorFailed:

? ? ? ? errorMsg =@"授權請求失敗";

? ? ? ? break ;

? ? case ASAuthorizationErrorInvalidResponse:

? ? ? ? errorMsg =@"授權請求響應無效";

? ? ? ? break ;

? ? case ASAuthorizationErrorNotHandled:

? ? ? ? errorMsg =@"未能處理授權請求";

? ? ? ? break ;

? ? case ASAuthorizationErrorUnknown:

? ? ? ? errorMsg =@"授權請求失敗未知原因";

? ? ? ? break ;

? ? default :

? ? ? ? break ;

}

//? ? NSMutableString *mStr = [_appleIDInfoLabel.text mutableCopy];

//? ? [mStr appendString:@"\n"];

//? ? [mStr appendString:errorMsg];

//? ? [mStr appendString:@"\n"];

}

// 告訴代理應該在哪個window 展示內容給用戶

- (ASPresentationAnchor)presentationAnchorForAuthorizationController:(ASAuthorizationController *)controller{

NSLog(@"88888888888");

// 返回window

return self .view.window;

}

后臺進行驗證信息,返回驗證信息過期,我一直在找原因,找了一天,后來發現是后臺code碼整錯了,-1代表驗證通過,驗證不通過是重新調用一下handleAuthorizationAppleIDButtonPress這個方法就可以,我甚至去看官方文檔,也沒有說重新獲取token或者刪除賬號的方法

iOS實現蘋果第三方登錄功能 - Sign in with apple

閑話少說,直接上碼

登陸developer賬號,在app bundle ID的Capabilities里,打勾 Sign In with Apple .

打開Xcode 11.0 Beta或更新版本,在項目設置 - Signing Capabilities 里,開啟 Sign in with Apple 選項。

實現分四大部分:

在上面 ASAuthorizationControllerDelegate 的用戶通過驗證的回調里,可以拿到 credential ,這里面有一些信息值得提下:

授權或者用戶信息是有可能被改變的,我們能做到就是盡早的檢測出這樣的改變,并做以應對。

檢測授權的狀態需要記錄在上面所得到的

在 AppleDelegate 里,把之前存的用戶ID放到 ASAuthorizationAppleIDProvider 里驗證即可,可以得到幾種用戶授權狀態:

如果有錯誤歡迎指出,也歡迎各種討論,謝????!

網頁標題:ios開發第三方登錄,ios開發登錄功能實現
網站URL:http://vcdvsql.cn/article38/dsiecsp.html

成都網站建設公司_創新互聯,為您提供定制網站虛擬主機網站導航外貿網站建設外貿建站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

營銷型網站建設