Google 允许后登录不重定向到应用程序
Google sign in not redirect to application after allow
我正在使用此 tutorial 在应用程序中使用 google 登录。
- 我通过 cocoapods 安装了 GoogleSignIn。
pod 'GoogleSignIn', '~> 2.4.0'
- 已添加
GSignIn-Bridging-Header.h
,其中包含 #import <GoogleSignIn/GoogleSignIn.h>
。
创建 url 类型:
创建视图 GIDSignInButton
class
添加代码:
class ViewController: UIViewController, GIDSignInDelegate, GIDSignInUIDelegate {
override func viewDidLoad() {
super.viewDidLoad()
GIDSignIn.sharedInstance().delegate = self
GIDSignIn.sharedInstance().uiDelegate = self
GIDSignIn.sharedInstance().clientID = "KEY"
}
func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: NSError!) {
if let err = error {
print(error)
}
else {
print(GIDSignIn.sharedInstance().currentUser.profile.name)
print(GIDSignIn.sharedInstance().currentUser.profile.email)
self.performSegueWithIdentifier("idSegueContent", sender: self)
}
}
func signIn(signIn: GIDSignIn!, didDisconnectWithUser user: GIDGoogleUser!, withError error: NSError!) {
}
}
但是当我点击允许时
它将我重定向到 google.com,而不是应用程序。
在AppDelegate中,您需要添加
的实现
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool
{
return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}
Google 通过URL 发回信息,上面的方法捕获此信息并发回给应用程序。
经过一天的工作,我终于解决了这个问题。 @ayman Ibrahim 基本上是对的,但我认为答案更广泛一些。不同版本的Swift/Objective-C和GoogleSDK,在AppDelegate中调用不同版本的canOpenURL方法。我对此不是 100% 确定,希望得到确认或更正。这是对我有用的方法的版本。我正在使用 Google 的 SDK v. 4.0,目标是 iOS 9.1,并使用 Swift 3.0:
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
let checkFB = FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
let checkGoogle = GIDSignIn.sharedInstance().handle(url as URL!,sourceApplication: sourceApplication,annotation: annotation)
return checkGoogle || checkFB
}
我也在用FBSDK,所以忽略那一行。
我确实找到了另一个答案。就我而言,在 AppDelegate 中我确实实现了 2 个委托方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
和
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
第一个是委托方法,不应该再实现,它被第二个方法取代。但不知何故,我仍然同时使用两者并添加
return [[GIDSignIn sharedInstance] handleURL:url
sourceApplication:sourceApplication
annotation:annotation];
在第二个中,然后又以某种方式,它只是回调到第一个方法,然后它不再导航到我的应用程序。
所以我想post把我的案例发给可能会犯这个错误的人,我花了很长时间才发现
如果您在应用程序委托中集成了 CleverTap 库 CleverTap.autoIntegrate()
,则不会将用户重定向回应用程序。手动添加 CleverTap 事件将解决此问题。如果你做对了其他一切。
我正在使用此 tutorial 在应用程序中使用 google 登录。
- 我通过 cocoapods 安装了 GoogleSignIn。
pod 'GoogleSignIn', '~> 2.4.0'
- 已添加
GSignIn-Bridging-Header.h
,其中包含#import <GoogleSignIn/GoogleSignIn.h>
。 创建 url 类型:
创建视图
GIDSignInButton
class添加代码:
class ViewController: UIViewController, GIDSignInDelegate, GIDSignInUIDelegate { override func viewDidLoad() { super.viewDidLoad() GIDSignIn.sharedInstance().delegate = self GIDSignIn.sharedInstance().uiDelegate = self GIDSignIn.sharedInstance().clientID = "KEY" } func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: NSError!) { if let err = error { print(error) } else { print(GIDSignIn.sharedInstance().currentUser.profile.name) print(GIDSignIn.sharedInstance().currentUser.profile.email) self.performSegueWithIdentifier("idSegueContent", sender: self) } } func signIn(signIn: GIDSignIn!, didDisconnectWithUser user: GIDGoogleUser!, withError error: NSError!) { } }
但是当我点击允许时
它将我重定向到 google.com,而不是应用程序。
在AppDelegate中,您需要添加
的实现func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool
{
return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}
Google 通过URL 发回信息,上面的方法捕获此信息并发回给应用程序。
经过一天的工作,我终于解决了这个问题。 @ayman Ibrahim 基本上是对的,但我认为答案更广泛一些。不同版本的Swift/Objective-C和GoogleSDK,在AppDelegate中调用不同版本的canOpenURL方法。我对此不是 100% 确定,希望得到确认或更正。这是对我有用的方法的版本。我正在使用 Google 的 SDK v. 4.0,目标是 iOS 9.1,并使用 Swift 3.0:
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
let checkFB = FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
let checkGoogle = GIDSignIn.sharedInstance().handle(url as URL!,sourceApplication: sourceApplication,annotation: annotation)
return checkGoogle || checkFB
}
我也在用FBSDK,所以忽略那一行。
我确实找到了另一个答案。就我而言,在 AppDelegate 中我确实实现了 2 个委托方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
和
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
第一个是委托方法,不应该再实现,它被第二个方法取代。但不知何故,我仍然同时使用两者并添加
return [[GIDSignIn sharedInstance] handleURL:url
sourceApplication:sourceApplication
annotation:annotation];
在第二个中,然后又以某种方式,它只是回调到第一个方法,然后它不再导航到我的应用程序。
所以我想post把我的案例发给可能会犯这个错误的人,我花了很长时间才发现
如果您在应用程序委托中集成了 CleverTap 库 CleverTap.autoIntegrate()
,则不会将用户重定向回应用程序。手动添加 CleverTap 事件将解决此问题。如果你做对了其他一切。