iOS:同时使用 Facebook 和 Google,Google Plus 登录
Posted
技术标签:
【中文标题】iOS:同时使用 Facebook 和 Google,Google Plus 登录【英文标题】:iOS: Using both Facebook and Google, Google Plus sign in 【发布时间】:2014-10-12 06:05:11 【问题描述】:早上好,
我正在尝试在同一视图中实现 Facebook 登录(工作正常)以及 google plus 登录。我正在关注官方网站 (Google) 的指南,但 Facebook 按钮和 google 加号按钮之间存在问题:
Facebook 告诉我输入以下代码:
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
return [FBAppCall handleOpenURL:url
sourceApplication:sourceApplication];
Google 还告诉我输入以下内容:
- (BOOL)application: (UIApplication *)application
openURL: (NSURL *)url
sourceApplication: (NSString *)sourceApplication
annotation: (id)annotation
return [GPPURLHandler handleURL:url
sourceApplication:sourceApplication
annotation:annotation];
而且我不能拥有相同名称的相同功能,也不能将一个功能集成到另一个内部。这就是为什么我需要你的帮助,因为我不知道如何处理这些准则之间的这个问题。
提前致谢。
【问题讨论】:
【参考方案1】:在这里,您必须在返回之前检查 [url scheme]。示例代码如下。
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
NSLog("%@", [url scheme]);
if([[url scheme] isEqualToString:FACEBOOK_SCHEME])
return [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];
else if([[url scheme] isEqualToString:GOOGLE_PLUS_SCHEME])
return [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation];
希望它能解决你的问题..
【讨论】:
感谢您的帮助。你能解释一下你的代码吗?因为这是我的第一个应用程序,我有点迷茫......非常感谢。 嗨@WirajPS 如果你只是 NSLog url 方案或只是在执行 facebook 登录或 google 登录后-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
中的 url。您将能够在 facebook 登录后检查 url 方案,并且 google 登录会有所不同。希望你明白我的意思。如有疑问请回复..
再次感谢 Sreejith。我必须在“FACEBOOK_SCHEME”中添加什么?
这里 FACEBOOK_SCHEME 和 GOOGLE_PLUS_SCHEME 是常量。FACEBOOK_SCHEME 就像 fb 附加了您的 facebook api 密钥,而 GOOGLE_PLUS_SCHEME 将是您的捆绑包 ID。希望您在 NSLog [url scheme]
时会显示出来。【参考方案2】:
这是 Swift 中的版本。
首先,您应该了解如何查看 Google 和 Facebook 返回 url 之间的区别。检测算法为:
Facebook URL 模式:fb1106884526040279://authorize/...
fb1106884526040279
是您的应用程序 ID。所以你只需要检查这个url是否以你的应用ID开头,主机是否等于authorize
(//
之后的字符串和第一个/
)
Google URL Pattern: com.googleusercontent.apps.803921065829-m34o26vcj57oirk1oa8pqve5o22qdihn
所以你只需要检查这个 url 是否以 com.googleusercontent.apps
开头。
根据上面的解释,我已经泛化成GoogleAuth
和FacebookAuth
utils类,并带有一些小方法,例如注销,检查登录...
这里是Google Authentication Utils
import Google
class GoogleAuth
static func getInstance() -> GIDSignIn
return GIDSignIn.sharedInstance()
static func isLogin() -> Bool
return getInstance().hasAuthInKeychain()
static func signOut()
getInstance().signOut()
static func isValidatedWithUrl(url: NSURL) -> Bool
return url.scheme.hasPrefix(NSBundle.mainBundle().bundleIdentifier!) || url.scheme.hasPrefix("com.googleusercontent.apps.")
其次是Facebook Authentication Utils
import FBSDKLoginKit
class FacebookAuth
static func isLogin() -> Bool
return FBSDKAccessToken.currentAccessToken() != nil
static func signOut()
FBSDKLoginManager().logOut()
static func isValidatedWithUrl(url: NSURL) -> Bool
return url.scheme.hasPrefix("fb\(FBSDKSettings.appID())") && url.host == "authorize"
这里是主要部分。在AppDelegate
中,您调用isValidateWithUrl
方法来检查此网址是否来自Google 或Facebook。
func application(application: UIApplication, openURL url: NSURL, options: [String: AnyObject]) -> Bool
print("step 2 of OAuth2. Url: \(url)")
// url from google
if GoogleAuth.isValidatedWithUrl(url)
return GIDSignIn.sharedInstance().handleURL(
url,
sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as? String,
annotation: options[UIApplicationOpenURLOptionsAnnotationKey])
// url from facebook
else if FacebookAuth.isValidatedWithUrl(url)
return FBSDKApplicationDelegate.sharedInstance().application(application,
openURL: url,
sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as! String,
annotation: options [UIApplicationOpenURLOptionsAnnotationKey])
// application hasn't supported this url yet
else
return false
希望得到帮助:)
【讨论】:
以上是关于iOS:同时使用 Facebook 和 Google,Google Plus 登录的主要内容,如果未能解决你的问题,请参考以下文章
使用 iOS9 重新编译时,Facebook 正在返回任何内容
同一应用中不同版本的 Facebook iOS SDK 和 Audience Network iOS SDK