iOS:使用Facebook和Google,Google Pluslogin

早上好,

我试图实现Facebook的login(这是工作正常),也谷歌加login在同一视图。 我正在关注官方网站(Google)的指南,但Facebookbutton和google plusbutton之间存在问题:

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]; } 

而且我不能用同一个名字来完成同样的function,而且我也不能把它们整合在一起。 这就是为什么我需要你的帮助,因为我不知道如何处理这些准则之间的这个问题。

提前致谢。

这里你必须在返回之前检查[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]; } } 

希望它能解决你的问题..

这里是Swift中的版本。

首先,您应该了解如何看到Google和Facebook返回url之间的区别。 检测algorithm是:

  1. Facebook URL模式: fb1106884526040279://authorize/...fb1106884526040279是您的应用程序ID。 所以你只需要检查这个url是否以你的应用程序ID开头,主机是否等于authorize//和第一个/之后的string)

  2. Googleurl格式: com.googleusercontent.apps.803921065829-m34o26vcj57oirk1oa8pqve5o22qdihn所以您只需要检查此url是否以com.googleusercontent.apps开头。

基于上面的解释,我已经推广到GoogleAuthFacebookAuth utils类与一些小方法,如注销,检查login…

这是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方法来检查这个URL是来自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 } } 

希望这个帮助:)

Interesting Posts