Надеюсь, вы здоровы!
Итак, я погрузился в разработку приложений для 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