Google +使用google sdk v3.x从appstoreloginiOS应用程序拒绝

挖了很多,我在这里张贴我的问题。 我在我的应用程序中使用谷歌login最新SDK,应用程序支持iOS 8 +。 我目前正在使用Xcode 7.2。 最近,我的应用程序被许多用户在过去经历的常见原因拒绝了:

从APPSTORE
我们注意到,用户被带到Safarilogin或注册一个帐户,这提供了一个糟糕的用户体验。 具体来说,Googlelogin将用户带到Safarilogin。

下一步

10.6请修改您的应用程序,以使用户可以在应用程序中login或注册一个帐户。

我们build议您使用Safari View Controller API在您的应用程序中显示网页内容。 Safari浏览器控制器允许在应用程序中显示URL并检查来自embedded式浏览器的证书,以便客户可以validation网页URL和SSL证书,以确认他们将自己的login凭据input合法页面。
结束

我已经知道这个拒绝,因为苹果已经拒绝了很多正在Safari浏览器中loginstream量的应用程序。 以下是一些可供参考的链接
https://code.google.com/p/google-plus-platform/issues/detail?id=900
https://github.com/Torsten2217/google-plus-platform/issues/900

还有一些你可以在互联网上轻松find的链接

2015年5月,谷歌发布了一个新的原生Web浏览器的SDK。 整合过程如下http://www.appcoda.com/google-sign-in-how-to/ 。
它与iOS 8工作正常,并提出了一个控制器。

现在我正在使用我通过CocoaPods https://developers.google.com/identity/sign-in/ios/start安装的最新的google sdk
从谷歌的上述链接有一个尝试login的iOS示例,我试过了。 它现在只在iOS 9中打开本机SFSafariViewController ,但在iOS 8中,loginstream程再次从应用程序到Safari浏览器。

在评论中苹果的评论家要求使用SafariViewController但是控件的可用性来自iOS 9及以上版本。这里是链接https://developer.apple.com/library/ios/documentation/SafariServices/Reference/SFSafariViewController_Ref/
我怎样才能实现这一点与iOS 8的最新谷歌SDK。
评论者既没有提到他/她正在testing的iOS版本。

现在任何人都可以帮我解决这个问题。 我如何在iOS 8(Googlelogin页面的本机现有控制器)中进行pipe理。

最后,问题是通过最新的Google+ Sign SDK整理出来的,该应用程序也得到了Apple的批准。 我发布了iOS 9iOS 8的解决scheme。
使用CocoaPods进行集成。

 pod 'Google/SignIn' 

要开始login,您必须执行“ 开始集成部分”中提到的完全相同的步骤

现在在添加login部分,我想在我的自定义类的UIViewController一些自定义button启动login过程。 在Google的开发者链接中,他们仅在AppDelegate中redirect。 所以为了避免这种情况,我不会在我的AppDelegate类中使用GIDSignInDelegate

我只会在AppDelegate的以下两个方法中进行更改

 //This is available for iOS 9 and above. So we have to use this method if we are integrating Google Sign In in iOS 9 func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) //This is available prior iOS 9 and is available for iOS 8,7 etc. This is a deprecated method for iOS 9. You have to override this too if your app supports iOS 8 platform. func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool 

所以定义如下:

 func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool { if #available(iOS 9.0, *) { return GIDSignIn.sharedInstance().handleURL(url, sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as? String, annotation: options[UIApplicationOpenURLOptionsAnnotationKey] as? String) } else { // Fallback on earlier versions } return true } func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { return GIDSignIn.sharedInstance().handleURL(url,sourceApplication: sourceApplication,annotation: annotation) } 

现在继续我们的自定义UIViewController类,即LoginViewController ,实现GIDSignInDelegateGIDSignInUIDelegate

 class LoginViewController: UIViewController, GIDSignInDelegate, GIDSignInUIDelegate { } 

有一个自定义UIButton的谷歌+login的定义是

 @IBAction func googleLoginButtonPressed(sender: AnyObject) { // Initialize sign-in var configureError: NSError? GGLContext.sharedInstance().configureWithError(&configureError) //assert(configureError == nil, "Error configuring Google services: \(configureError)") if configureError != nil { //Handle your error }else { GIDSignIn.sharedInstance().shouldFetchBasicProfile = true GIDSignIn.sharedInstance().clientID = kClientId GIDSignIn.sharedInstance().delegate = self GIDSignIn.sharedInstance().uiDelegate = self //This did the trick for iOS 8 and the controller is presented now in iOS 8 //We have to make allowsSignInWithBrowser false also. If we dont write this line and only write the 2nd line, then iOS 8 will not present a webview and again will take your flow outside the app in safari. So we have to write both the lines, Line 1 and Line 2 GIDSignIn.sharedInstance().allowsSignInWithBrowser = false //Line 1 GIDSignIn.sharedInstance().allowsSignInWithWebView = true //Line 2 GIDSignIn.sharedInstance().signIn() } } 

现在执行Google +login的委托方法

 func signIn(signIn: GIDSignIn!, dismissViewController viewController: UIViewController!) { self.dismissViewControllerAnimated(true) { () -> Void in } } func signIn(signIn: GIDSignIn!, presentViewController viewController: UIViewController!) { self.presentViewController(viewController, animated: true) { () -> Void in } } func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: NSError!) { if (error == nil) { // Perform any operations on signed in user here. let userId = user.userID // For client-side use only! let idToken = user.authentication.idToken // Safe to send to the server let fullName = user.profile.name let givenName = user.profile.givenName let familyName = user.profile.familyName let email = user.profile.email } else { print("\(error.localizedDescription)") } } func signIn(signIn: GIDSignIn!, didDisconnectWithUser user: GIDGoogleUser!, withError error: NSError!) { //Perform if user gets disconnected } 

现在,这将工作在iOS 8和9,而无需将您的应用程序外部移动到Safari的login目的在谷歌+。