2016-04-14 7 views
5

Nach dem Graben viel ich hier mein Problem posten. Ich benutze Google anmelden neueste sdk in meiner App und die App unterstützt iOS 8+. Ich verwende derzeit Xcode 7.2. Vor kurzem habe meine app mit dem sehr häufiger Grund abgelehnt, die viele Benutzer in der Vergangenheit erlebt haben:Google + Login iOS App Ablehnung von Appstore mit Google SDK v3.x

Appstore
Wir haben festgestellt, dass der Benutzer auf Safari genommen wird, sich anzumelden oder ein neues Konto registrieren, die eine bietet schlechte Benutzererfahrung. Insbesondere im Google-Log nimmt zu Safari-Benutzer sich anmelden.

Nächste Schritte

10,6 Bitte überarbeiten Sie Ihre App-Nutzer zu ermöglichen, sich anzumelden oder ein Konto in der App zu registrieren.

Wir empfehlen die Implementierung der Safari View Controller-API, um Webinhalte in Ihrer App anzuzeigen. Der Safari View Controller ermöglicht die Anzeige einer URL und die Überprüfung des Zertifikats über einen eingebetteten Browser in einer App, sodass Kunden die Webseiten-URL und das SSL-Zertifikat bestätigen können, um zu bestätigen, dass sie ihre Anmeldeinformationen in eine legitime Seite eingeben.
END

Ich weiß schon, diese Ablehnung als Apfel viele apps abgelehnt hat, die das Anmelden Fluss aus in den Safari-Browser nehmen. Hier sind einige Links zu Referenz
https://code.google.com/p/google-plus-platform/issues/detail?id=900
https://github.com/Torsten2217/google-plus-platform/issues/900

und einige weitere Links finden Sie leicht auf Internet

Am Mai 2015 Google eine neue sdk mit nativen Web-Ansicht freigegeben. Der vollständige Prozess der Integration ist hier aufgeführt http://www.appcoda.com/google-sign-in-how-to/.
Es funktionierte gut mit iOS 8 und präsentierte auch einen Controller.

Jetzt Log-in für iOS Probe, die ich versuchte, war ich die neueste Google-SDK, die ich über CocoaPods installiert https://developers.google.com/identity/sign-in/ios/start
Der obige Link von Google ein Versuchen hat. Es wird jetzt nur ein natives SFSafariViewController in iOS 9 geöffnet, aber in iOS 8 wird der Login-Flow wieder außerhalb der App zum Safari-Browser geleitet.

In den Kommentaren Apfel Rezensent fragte SafariViewController zu verwenden, aber die Verfügbarkeit der Steuerung ist von iOS 9 und höher .Hier ist die Verbindung https://developer.apple.com/library/ios/documentation/SafariServices/Reference/SFSafariViewController_Ref/
Wie kann ich dies in iOS mit neuesten Google sdk erreichen 8.
Die Der Rezensent hat die iOS-Version, die er getestet hat, nicht erwähnt.

Jetzt kann mir jemand helfen, dies zu sortieren. Wie kann ich in iOS 8 den nativen Gegenwartscontroller für die Google Login-Seite verwalten.

+1

Mögliches Duplikat von [Google + iPhone API anmelden und teilen ohne die App zu verlassen] (http://stackoverflow.com/questions/15281386/google-iphone-api-sign-in-and-share-without-leaving-) App) – JAL

+0

@JAL cmon Mann. Es war ein Posten 2013. Die Dinge haben sich sehr verändert. Lesen Sie einfach meine Frage und suchen Sie nach dem Wort SFSafariView –

+0

Warum nicht ** Sie ** die verknüpfte Frage lesen. 'SFSafariViewController' ist nur auf iOS 9 und höher verfügbar. Für iOS 8 und niedriger liegt Ihre Antwort in der verknüpften Frage. – JAL

Antwort

10

Schließlich ist das Problem mit dem neuesten Google+ Sign SDK aussortiert und die App ist auch von Apple genehmigt. Ich poste eine Lösung für beide iOS 9 und iOS 8.
Verwenden Sie CocoaPods für die Integration.

pod 'Google/SignIn' 

mit Login starten Sie haben genau die gleichen Schritte in der starten Abschnitt Integration erwähnt zu tun here

Jetzt im hinzufügen Sign-In Teil möchte ich einige benutzerdefinierte Schaltfläche in Meine benutzerdefinierte Klasse von UIViewController, um den Anmeldevorgang einzuleiten. Im Entwicklerlink von Google leiten sie nur AppDelegate um. So dies zu vermeiden, will ich nicht GIDSignInDelegate in meiner AppDelegate Klasse verwenden

Ich werde nur in den folgenden zwei Methoden der 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 

die Änderungen werden so werden die Definitionen wie folgt:

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) 
} 

Jetzt auf unsere Custom UIViewController Klasse dh LoginViewController bewegen auf, implementieren die GIDSignInDelegate und GIDSignInUIDelegate

class LoginViewController: UIViewController, GIDSignInDelegate, GIDSignInUIDelegate { 

} 

Es ist ein Brauch UIButton für Google + Login deren Definition

@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() 
    } 

} 

Nun ist die Implementierung von Delegierten Methoden für Google + Einloggen

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 
} 

Jetzt wird diese Arbeit in Sowohl iOS 8 als auch iOS 9, ohne Ihre App für Google Login nach draußen in Safari zu verschieben.

+0

Vielen Dank! Ich probiere es jetzt aus. Aber ich bin neugierig, haben Sie eine Art Feature von Google oder ähnliches in Ihrer App? – tyegah123

+0

dafür können Sie nicht die Google-Anmeldung verwenden. Sie müssen die Google-Freigabe sdk verwenden. –

+0

Nein, ich verwende diese Freigabefunktion auch nicht. Es ist nur so, weil Apple selbst dann, als ich das Google Sign In SDK nutze, sagte, es sei das Google+ SDK und dies war einer der Gründe für die Ablehnung der App. Also habe ich mich gefragt, ob du etwas mit deiner App teilen würdest. Aber trotzdem, vielen Dank für Ihre Hilfe. Ich habe es endlich an meiner App arbeiten lassen.: D – tyegah123