Google + login Отключение приложения iOS из AppStore с помощью google sdk v3.x

После многократного копания я здесь отправляю свою проблему. Я использую знак google в последнем sdk в моем приложении, и приложение поддерживает iOS 8+. В настоящее время я использую Xcode 7.2. Недавно мое приложение было отклонено с той общей причиной, которую многие пользователи испытывали в прошлом:

ОТ ПРИЛОЖЕНИЯ
Мы заметили, что пользователь переходит в Safari для входа в систему или регистрации для учетной записи, что обеспечивает плохой пользовательский интерфейс. В частности, вход в Google для входа в систему для пользователей Safari.

Следующие шаги

10.6. Пожалуйста, перейдите в свое приложение, чтобы пользователи могли войти в систему или зарегистрировать учетную запись в приложении.

Мы рекомендуем внедрить API-интерфейс Safari View Controller для отображения веб-контента в вашем приложении. Контроллер просмотра Safari позволяет отображать URL-адрес и проверять сертификат из встроенного браузера в приложении, чтобы клиенты могли проверить URL-адрес веб-страницы и сертификат SSL, чтобы подтвердить, что они вводят свой знак учетных данных на законную страницу.
КОНЕЦ

Я уже знаю это отклонение, так как яблоко отклонило множество приложений, которые выходят из входа в браузере Safari. Вот некоторые ссылки для справки
https://code.google.com/p/google-plus-platform/issues/detail?id=900
https://github.com/Torsten2217/google-plus-platform/issues/900

и еще несколько ссылок, которые вы можете легко найти в Интернете

В мае 2015 года Google выпустил новый sdk с собственным веб-представлением. Полный процесс интеграции приведен здесь http://www.appcoda.com/google-sign-in-how-to/ .
Он отлично работал с iOS 8 и также представлял контроллер.

Теперь я использовал последнюю версию svd google, которую я установил через CocoaPods https://developers.google.com/identity/sign-in/ios/start
В приведенной выше ссылке из Google есть пример пробной версии для iOS, который я попробовал. Теперь он открывает собственный SFSafariViewController в iOS 9, но в iOS 8 поток входа снова выходит за пределы приложения в браузер Safari.

В комментариях apple reviewer попросил использовать SafariViewController но доступность элемента управления находится в iOS 9 и выше. Вот ссылка https://developer.apple.com/library/ios/documentation/SafariServices/Reference/SFSafariViewController_Ref/
Как я могу достичь этого с помощью последнего google sdk в iOS 8.
Рецензент не упоминает версию iOS, которую он тестировал.

Теперь может кто-нибудь помочь мне в этом разобраться. Как я могу управлять в iOS 8, встроенном контроллере на странице входа в Google.

Наконец, проблема разобралась с последним SDK Google+ Sign, и приложение также одобрено Apple. Я отправляю решение как для iOS 9, так и для iOS 8 .
Используйте CocoaPods для интеграции.

 pod 'Google/SignIn' 

Чтобы начать с входа в систему, вы должны выполнить те же действия, что и в разделе « Начать интеграцию»

Теперь в разделе « Добавить вход» я хочу, чтобы в моем пользовательском классе UIViewController была UIViewController пользовательская UIViewController чтобы инициировать процесс входа в систему. В ссылке разработчика Google они перенаправляются только в AppDelegate. Поэтому, чтобы этого избежать, я не буду использовать GIDSignInDelegate в классе AppDelegate

Я буду только вносить изменения в следующие два метода 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 , т.е. LoginViewController , реализуем GIDSignInDelegate и GIDSignInUIDelegate

 class LoginViewController: UIViewController, GIDSignInDelegate, GIDSignInUIDelegate { } 

Существует обычная учетная запись UIButton для Google +, определение которой

 @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 + Sign In

 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 для входа в Google+.

  • Как открыть ссылки YouTube в SafariController вместо приложения YouTube в iOS в Swift
  • Возможно ли предоставлять настраиваемые заголовки в контроллер просмотра Safari
  • В iOS 9, почему SFSafariViewController толкается вместо представленного модально?
  • Кнопка SFSafariViewController не работает
  • Ошибка MKMapView и ошибка SFViewController
  • Установите цвет кнопки «Готово» на SFSafariViewController
  • Вход не работает / застрял с последним пакетом Facebook SDK
  • Есть ли способ установить референт в первоначальном запросе, сделанном SFSafariViewController?
  • Safari View Controller использует неправильный цвет строки состояния
  • Как изменить цвет фона SFSafariViewController?
  • Внедрение SFSafariViewController OAuth
  • Interesting Posts

    Использование дисковых кэшированных изображений, если они присутствуют в изображениях Alamofire

    iOS 11 Core NFC – любой пример кода?

    React Native, используя предварительно упакованный файл на устройстве, даже если DEV-режим

    Почему Xcode 5 не позволяет мне указывать iPad-изображения для iPhone-приложения? А как насчет иконки iTunes?

    Объект C: класс init с блоком?

    "OldValue" и "newValue" имена параметров по умолчанию внутри willSet / didSet непризнанные

    UISegmentedControl текст с несколькими строками?

    Интерфейс печати iOS – ограничение количества копий

    Пример SDK для Google Диска для iOS не работает

    Доступ к локальному хосту на Mac с XCode? Телефонная связь, связывающая Ajax с локальным Rails-приложением

    Правила сравнения версий приложений App Store для iOS

    xcode В этой команде уже существует устройство с номером.

    Сохранение изображения в папке «Документы» и извлечение для вложения электронной почты

    Как удалили отпечатки пальцев Uber, чтобы идентифицировать их даже после того, как приложение Uber было удалено?

    Неподдерживаемая операция. Приложениям запрещается прослушивать уведомления о блокировке устройства.

    Давайте будем гением компьютера.