Быстрый вход в Google+ GPPSignIn.sharedInstance (). UserID всегда равен нулю

Я пытаюсь реализовать вход в Google+ в приложении iOS, используя язык Swift.

Мой код выглядит так:

var kClientId = "My Client ID from Dev Console"
var signIn = GPPSignIn.sharedInstance()
signIn.shouldFetchGooglePlusUser = true
signIn.shouldFetchGoogleUserEmail = true
signIn.shouldFetchGoogleUserID = true
signIn.clientID = kClientId
signIn.scopes = [kGTLAuthScopePlusLogin]
signIn.delegate = self
signIn.authenticate()

В целях тестирования я создал этикетку и хотел изменить ее на электронную почту пользователя, который вошел в систему.

if (GPPSignIn.sharedInstance().userID != nil) {
    var user = GPPSignIn.sharedInstance().googlePlusUser
    userName.text = user.name.JSONString()
    if (user.emails != nil){
        userEmailLable.text = user.emails.first?.JSONString() ?? "no email"
    } else {
        userEmailLable.text = "no email"
    }
} else {
    println("User ID is nil")
}

После того, как я нажму кнопку «Войти», откроется вкладка Safari, и я могу ввести свой адрес электронной почты и пароль Google, он запрашивает разрешения для определенных вещей и после нажатия кнопки «Принять» возвращается обратно в приложение. Мой userEmailLable не изменяется, и в качестве вывода он выводит «User ID is nil». Это происходит постоянно и не было ни одного успешного входа в систему.

Мои фреймворки Google все в порядке, URL-адреса тоже правильные, в консоли разработчика Google все в порядке.

Файл AppDelegate.swift также включает эту функцию

func application(application: UIApplication, openURL url: NSURL, sourcApplication: String, annotation: AnyObject?) -> Bool {
    return GPPURLHandler.handleURL(url, sourceApplication: sourcApplication, annotation: annotation)
}

Кто-нибудь знает, почему это так? Спасибо!


person Rickard Kruusberg    schedule 20.07.2015    source источник


Ответы (1)


Это странно. Я попробовал создать пример, следуя инструкциям Google. Он работает, как ожидалось. и распечатывает правильный результат.

Кроме того, вот еще одна интересная пошаговая запись.

Я выполнил те же шаги, что и в руководстве - создал консольное приложение, зарегистрировал схему URL-адресов для приложения iOS, используя свой идентификатор пакета.

Вот мой код контроллера представления.

import UIKit

class ViewController: UIViewController, GPPSignInDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        let signIn = GPPSignIn.sharedInstance()
        signIn.shouldFetchGooglePlusUser = true
        signIn.shouldFetchGoogleUserEmail = true  // Uncomment to get the user's email
        signIn.shouldFetchGoogleUserID = true

        signIn.clientID = "… my client ID"

        // Uncomment one of these two statements for the scope you chose in the previous step
        signIn.scopes = [ kGTLAuthScopePlusLogin ]  // "https://www.googleapis.com/auth/plus.login" scope

        signIn.delegate = self
        signIn.authenticate()
    }



    // MARK: - GPPSignInDelegate

    func finishedWithAuth(auth: GTMOAuth2Authentication!, error: NSError!) {
        print("received auth \(auth), error \(error)")

        if (GPPSignIn.sharedInstance().userID != nil) {
            let user = GPPSignIn.sharedInstance().googlePlusUser
            println("user name: " + user.name.JSONString() + "\nemail: ")
            if (user.emails != nil){
                print(user.emails.first?.JSONString() ?? "no email")
            } else {
                print("no email")
            }
        } else {
            println("User ID is nil")
        }
    }
}

В дополнение к этому у меня также есть функция делегата приложения (но обратите внимание, что некоторые из необязательных спецификаторов отличаются)

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {
    return GPPURLHandler.handleURL(url, sourceApplication:sourceApplication, annotation: annotation)
}
person Jaanus    schedule 31.07.2015
comment
Я получаю сообщение об ошибке недопустимого повторного объявления в AppDelegate ... Пожалуйста, не могли бы вы мне помочь ... Я изучаю быстрый ad-hoc, поэтому мне сложно - person therealprashant; 05.10.2015