Как добавить GoogleSignIn в мое приложение iOS - требуется помощь - PullRequest
0 голосов
/ 30 апреля 2020

Надеюсь, вы здоровы!

Итак, я погрузился в разработку приложений для iOS / iPadOS с помощью Swift 5 и пытаюсь создать приложение, позволяющее пользователям просматривать файлы pdf со своего Google Диска.

Я следил за многочисленными уроками и др. c. из Интернета, но при использовании их кода меня обычно забрасывают ошибками.

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

Я добавил необходимые библиотеки, используя Cocoapods. (И да, я добавил идентификатор клиента и обратные идентификаторы клиентов, где это необходимо ;-)) Я скопировал код из их AppDelegate.swift, а также из их файла ViewController.swift, просто чтобы узнать из него. Я добавил три кнопки через раскадровку, одну для входа, одну для выхода и одну для отключения в соответствии с руководством и кодом Swift. Я подключил их с помощью Ctrl + Drag и удалил ссылки в ViewController.swift. файл, который уже был там.

Но я должен что-то упустить. Когда я запускаю код в симуляторе, нажатие кнопки «Войти» ничего не делает. Я как бы дергаю себя за волосы здесь (будучи более или менее полным новичком ie к этому) и мне нужна помощь.

Мой AppDelegate.swift:

//
//  AppDelegate.swift
//  GoogleDriveTest
//
//  Created by MY_NAME on 30/04/2020.
//  Copyright © 2020 MY_DEV_NAME. All rights reserved.
//
import UIKit
import GoogleSignIn

@UIApplicationMain
// [START appdelegate_interfaces]
class AppDelegate: UIResponder, UIApplicationDelegate, GIDSignInDelegate {

  // [END appdelegate_interfaces]
  var window: UIWindow?

  // [START didfinishlaunching]
  func application(_ application: UIApplication,
                   didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Initialize sign-in
    GIDSignIn.sharedInstance().clientID = "MY_CLIENT_ID"
    GIDSignIn.sharedInstance().delegate = self

    return true
  }
  // [END didfinishlaunching]
  // [START openurl]
  func application(_ application: UIApplication,
                   open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
    return GIDSignIn.sharedInstance().handle(url)
  }
  // [END openurl]
  // [START openurl_new]
  @available(iOS 9.0, *)
  func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any]) -> Bool {
    return GIDSignIn.sharedInstance().handle(url)
  }
  // [END openurl_new]
  // [START signin_handler]
  func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!,
            withError error: Error!) {
    if let error = error {
      if (error as NSError).code == GIDSignInErrorCode.hasNoAuthInKeychain.rawValue {
        print("The user has not signed in before or they have since signed out.")
      } else {
        print("\(error.localizedDescription)")
      }
      // [START_EXCLUDE silent]
      NotificationCenter.default.post(
        name: Notification.Name(rawValue: "ToggleAuthUINotification"), object: nil, userInfo: nil)
      // [END_EXCLUDE]
      return
    }
    // 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
    // [START_EXCLUDE]
    NotificationCenter.default.post(
      name: Notification.Name(rawValue: "ToggleAuthUINotification"),
      object: nil,
      userInfo: ["statusText": "Signed in user:\n\(fullName!)"])
    // [END_EXCLUDE]
  }
  // [END signin_handler]
  // [START disconnect_handler]
  func sign(_ signIn: GIDSignIn!, didDisconnectWith user: GIDGoogleUser!,
            withError error: Error!) {
    // Perform any operations when the user disconnects from app here.
    // [START_EXCLUDE]
    NotificationCenter.default.post(
      name: Notification.Name(rawValue: "ToggleAuthUINotification"),
      object: nil,
      userInfo: ["statusText": "User has disconnected."])
    // [END_EXCLUDE]
  }
  // [END disconnect_handler]
}

My ViewController.swift:

//
//  ViewController.swift
//  GoogleDriveTest
//
//  Created by MY_NAME on 30/04/2020.
//  Copyright © 2020 MY_DEV_NAME. All rights reserved.
//
import UIKit
import GoogleSignIn

// Match the ObjC symbol name inside Main.storyboard.
@objc(ViewController)
// [START viewcontroller_interfaces]
class ViewController: UIViewController {
// [END viewcontroller_interfaces]
  // [START viewcontroller_vars]
    @IBOutlet weak var signInButton: GIDSignInButton!
    @IBOutlet weak var signOutButton: UIButton!
    @IBOutlet weak var disconnectButton: UIButton!
    @IBOutlet weak var statusText: UILabel!
  // [END viewcontroller_vars]
  // [START viewdidload]
  override func viewDidLoad() {
    super.viewDidLoad()

    GIDSignIn.sharedInstance()?.presentingViewController = self

    // Automatically sign in the user.
    GIDSignIn.sharedInstance()?.restorePreviousSignIn()

    // [START_EXCLUDE]
    NotificationCenter.default.addObserver(self,
        selector: #selector(ViewController.receiveToggleAuthUINotification(_:)),
        name: NSNotification.Name(rawValue: "ToggleAuthUINotification"),
        object: nil)

    statusText.text = "Initialized Swift app..."
    toggleAuthUI()
    // [END_EXCLUDE]
  }
  // [END viewdidload]
  // [START signout_tapped]
  @IBAction func didTapSignOut(_ sender: AnyObject) {
    GIDSignIn.sharedInstance().signOut()
    // [START_EXCLUDE silent]
    statusText.text = "Signed out."
    toggleAuthUI()
    // [END_EXCLUDE]
  }
  // [END signout_tapped]
  // [START disconnect_tapped]
  @IBAction func didTapDisconnect(_ sender: AnyObject) {
    GIDSignIn.sharedInstance().disconnect()
    // [START_EXCLUDE silent]
    statusText.text = "Disconnecting."
    // [END_EXCLUDE]
  }
  // [END disconnect_tapped]
  // [START toggle_auth]
  func toggleAuthUI() {
    if let _ = GIDSignIn.sharedInstance()?.currentUser?.authentication {
      // Signed in
      signInButton.isHidden = true
      signOutButton.isHidden = false
      disconnectButton.isHidden = false
    } else {
      signInButton.isHidden = false
      signOutButton.isHidden = true
      disconnectButton.isHidden = true
      statusText.text = "Google Sign in\niOS Demo"
    }
  }
  // [END toggle_auth]
  override var preferredStatusBarStyle: UIStatusBarStyle {
    return UIStatusBarStyle.lightContent
  }

  deinit {
    NotificationCenter.default.removeObserver(self,
        name: NSNotification.Name(rawValue: "ToggleAuthUINotification"),
        object: nil)
  }

  @objc func receiveToggleAuthUINotification(_ notification: NSNotification) {
    if notification.name.rawValue == "ToggleAuthUINotification" {
      self.toggleAuthUI()
      if notification.userInfo != nil {
        guard let userInfo = notification.userInfo as? [String:String] else { return }
        self.statusText.text = userInfo["statusText"]!
      }
    }
  }

}

Заранее спасибо, надеюсь, я смогу поучиться на этом. Stefan

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...