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是:
-
Facebook URL模式:
fb1106884526040279://authorize/...
与fb1106884526040279
是您的应用程序ID。 所以你只需要检查这个url是否以你的应用程序ID开头,主机是否等于authorize
(//
和第一个/
之后的string) -
Googleurl格式:
com.googleusercontent.apps.803921065829-m34o26vcj57oirk1oa8pqve5o22qdihn
所以您只需要检查此url是否以com.googleusercontent.apps
开头。
基于上面的解释,我已经推广到GoogleAuth
和FacebookAuth
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 } }
希望这个帮助:)