Firebase Twitter oAuth 回调不适用于 Swift ios13
Posted
技术标签:
【中文标题】Firebase Twitter oAuth 回调不适用于 Swift ios13【英文标题】:Firebase Twitter oAuth callback not working for Swift ios13 【发布时间】:2020-04-23 00:17:55 【问题描述】:我已经按照https://firebase.google.com/docs/auth/ios/twitter-login 上的说明操作了 Swift 的 T 并且我得到了 Web 弹出窗口以授权我在 Twitter Dev 上创建的应用程序,调用回调,然后 webview 位于 about:blank 的空白页面上.什么都做不了,只能单击完成按钮,然后导致错误域 = FIRAuthErrorDomain 代码 = 17058 “用户取消了交互。” 回调地址正确。我使用 Twitter Consumer API Keys 作为在 Firebase 控制台中输入的密钥。
我错过了什么?
【问题讨论】:
您是否在 info.plist 的 URL 类型中添加了 twitterkit-xxxxxxxxxxxxxxx 值作为 URL 方案?您还需要在项目信息 URL 类型部分手动添加此 twitterkit-xxxxxxxxxxxxxxx 值。 我没有使用 Twitter 用来开发的 twitterkit。它已存档在 github 上,不再受支持。只是尝试使用 firebase 指令。 当我在 twitter Webview 弹出窗口中单击 Authorize App 时,它会重定向到:myappname.firebaseapp.com/__/auth/…。但随后什么也没有发生,它只是坐在一个空白页面上,没有返回凭据。 我也尝试了firebase的说明,但我没有这样做。然后我使用了 twitterkit,它也在 iOS 13 中运行。我知道它已被弃用,但如果没有它,我将无法管理 firebase twitter 社交登录。 你有没有让这个工作?我在使用 twitterkit,现在需要换成别的东西。 【参考方案1】:好的,所以我解决了这个问题,但现在不完全确定如何解决。我相信这是因为没有发出回调,因此没有被应用程序接收。由于身份验证,回调不是问题,我相信是因为我没有创建服务条款和隐私政策。因此,请确保您已在 Twitter 开发页面中完成此操作。
在twitter dev页面中,回调链接为:https://yourApp.firebaseapp.com/__/auth/handler 当您启用 twitter 时,您会在 Firebase 身份验证设置中找到它。
确保在 info.plist LSApplicationQueriesSchemes 中有一个数组: 推特 推特认证
在您的 swift 文件中:
var provider = OAuthProvider(providerID: "twitter.com")
您的按钮操作:
@IBAction func onCustonTwitterButtonPressed(_ sender: Any)
MyAppsCoreServicesScripts.logoutSocial() // My logout routine.
provider.getCredentialWith(nil) credential, error in
if let error = error
MyAppsCoreServicesScripts.showError(prefix: "Twitter Login",error: error, showMsg: true)
else if credential != nil
self.firebaseLogin(credential!)
祝你好运!希望这对某人有所帮助。
【讨论】:
能否详细说明您在 LSApplicationQueriesSchemes 中分配了什么?【参考方案2】:对于所有在回调工作方面仍有问题的人,我设法解决了这个问题。可悲的是,您必须编辑库中的方法(不是最好的方法,但仍然。错误已报告给 firebase 团队)。该方法应如下所示(您可以在名为 FIROAuthProvider.m 的文件中找到它,第 125 行。我故意留下了注释行,所以您会在那里看到问题......希望它对某人有所帮助:)
- (void)getCredentialWithUIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
completion:(nullable FIRAuthCredentialCallback)completion
if (![FIRAuthWebUtils isCallbackSchemeRegisteredForCustomURLScheme:self->_callbackScheme])
[NSException raise:NSInternalInconsistencyException
format:@"Please register custom URL scheme '%@' in the app's Info.plist file.",
self->_callbackScheme];
// __weak __typeof__(self) weakSelf = self;
// __weak FIRAuth *weakAuth = _auth;
// __weak NSString *weakProviderID = _providerID;
dispatch_async(FIRAuthGlobalWorkQueue(), ^
FIRAuthCredentialCallback callbackOnMainThread =
^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error)
if (completion)
dispatch_async(dispatch_get_main_queue(), ^
completion(credential, error);
);
;
NSString *eventID = [FIRAuthWebUtils randomStringWithLength:10];
NSString *sessionID = [FIRAuthWebUtils randomStringWithLength:10];
// __strong __typeof__(self) strongSelf = weakSelf;
[self
getHeadFulLiteURLWithEventID:eventID
sessionID:sessionID
completion:^(NSURL *_Nullable headfulLiteURL, NSError *_Nullable error)
if (error)
callbackOnMainThread(nil, error);
return;
FIRAuthURLCallbackMatcher callbackMatcher =
^BOOL(NSURL *_Nullable callbackURL)
return [FIRAuthWebUtils
isExpectedCallbackURL:callbackURL
eventID:eventID
authType:kAuthTypeSignInWithRedirect
callbackScheme:self->_callbackScheme];
;
// __strong FIRAuth *strongAuth = weakAuth;
[_auth.authURLPresenter
presentURL:headfulLiteURL
UIDelegate:UIDelegate
callbackMatcher:callbackMatcher
completion:^(NSURL *_Nullable callbackURL,
NSError *_Nullable error)
if (error)
callbackOnMainThread(nil, error);
return;
NSString *OAuthResponseURLString =
[self OAuthResponseForURL:callbackURL
error:&error];
if (error)
callbackOnMainThread(nil, error);
return;
__strong NSString *strongProviderID = _providerID;
FIROAuthCredential *credential = [[FIROAuthCredential alloc]
initWithProviderID:strongProviderID
sessionID:sessionID
OAuthResponseURLString:OAuthResponseURLString];
callbackOnMainThread(credential, nil);
];
];
);
【讨论】:
你节省了我的时间!谢谢! 哇,真的是问题所在,感谢您的帮助!但是这怎么可能还存在呢? 这个!!谢谢你的提示 !我遇到了根本没有调用回调的问题,即使我认为我遵循了 Firebase 教程中的所有步骤。这立即解决了问题。以上是关于Firebase Twitter oAuth 回调不适用于 Swift ios13的主要内容,如果未能解决你的问题,请参考以下文章
带有 Rails 5 的 Omniauth-twitter 停止工作! OAuth::Unauthorized 403 Forbidden
Twitter oAuth callbackUrl - 本地主机开发