2016-07-26 43 views
0

In meiner App habe ich die Möglichkeit, mich mit google anmelden in der App einloggen. Login funktioniert gut. Sobald ich auf den Abmelden-Button klicke, kann ich mich nicht mehr von Google ausloggen. Wann immer ich auf Login-Button klicken wird es nicht Login-Seite zeigt als Bild unten:Wie kann ich mich von einem Google-Konto in ios abmelden?

enter image description here

Statt dessen Umlenken Dialogseite zur Authentifizierung als Bild unten:

enter image description here

Code:

override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    GIDSignIn.sharedInstance().uiDelegate = self 
    let button = GIDSignInButton(frame: CGRectMake(0, 0, 100, 100)) 
    button.center = view.center 
    view.addSubview(button) 
} 

@IBAction func signOutButton(sender: AnyObject) { 
    GIDSignIn.sharedInstance().signOut()  
} 
+0

müssen Sie den Cache löschen –

+0

@ Anbu.Karthik - ich habe es manuell getan, indem Sie durch die Einstellungen dann Safari geht es nicht immer funktioniert. Wie lösche ich den Cache des Safari View Controllers mit Swift, ist das auf iOS möglich? –

+0

Sehen Sie dies möglicherweise Hilfe ypu http://stackoverflow.com/questions/15064854/delete-files-from-nscachesdirectory-programmatisch –

Antwort

0

1.Importieren unter

2.declare unter dem variablen

let kKeychainItemName = "your app name" 
let kClientID = "your app clinet id" 
let scopes = [kGTLAuthScopeDrive] 
let service = GTLServiceDrive() 

3.replace diesen Methoden, um einen vorhandenen

override func viewDidLoad() { 
    super.viewDidLoad() 

    if let auth = GTMOAuth2ViewControllerTouch.authForGoogleFromKeychainForName(
     kKeychainItemName, 
     clientID: kClientID, 
     clientSecret: nil) { 
     service.authorizer = auth 
    } 


    self.tblView.tableFooterView=UIView() 
    // Do any additional setup after loading the view. 
} 

override func viewDidAppear(animated: Bool) { 
    if let authorizer = service.authorizer, 
     canAuth = authorizer.canAuthorize where canAuth { 
     fetchFiles() 
    } else { 
     presentViewController(
      createAuthController(), 
      animated: true, 
      completion: nil 
     ) 
    } 
} 
func fetchFiles() { 
    let query = GTLQueryDrive.queryForFilesList() 
    query.pageSize = 10 
    query.fields = "nextPageToken, files(id, name)" 
    service.executeQuery(
     query, 
     delegate: self, 
     didFinishSelector: #selector(GoogleDriveVC.displayResultWithTicket(_:finishedWithObject:error:)) 
    ) 
} 

// Parse results and display 
func displayResultWithTicket(ticket : GTLServiceTicket, 
          finishedWithObject response : GTLDriveFileList, 
               error : NSError?) { 
    if let error = error { 
     showAlert("Error", message: error.localizedDescription) 
     return 
    } 
    if let files = response.files where !files.isEmpty { 
     for file in files as! [GTLDriveFile] { 
      self.arrayOfNames.append(file.name) 
      self.arrayOfIdentifier.append(file.identifier) 
     } 
    } 
    self.tblView.reloadData() 
} 

// Creates the auth controller for authorizing access to Drive API 
private func createAuthController() -> GTMOAuth2ViewControllerTouch { 
    let scopeString = scopes.joinWithSeparator(" ") 
    return GTMOAuth2ViewControllerTouch(
     scope: scopeString, 
     clientID: kClientID, 
     clientSecret: nil, 
     keychainItemName: kKeychainItemName, 
     delegate: self, 
     finishedSelector: #selector(GoogleDriveVC.viewController(_:finishedWithAuth:error:)) 
    ) 
} 

// Handle completion of the authorization process, and update the Drive API 
// with the new credentials. 
func viewController(vc : UIViewController, 
        finishedWithAuth authResult : GTMOAuth2Authentication, error : NSError?) { 

    if let error = error { 
     service.authorizer = nil 
     showAlert("Authentication Error", message: error.localizedDescription) 
     return 
    } 

    service.authorizer = authResult 
    dismissViewControllerAnimated(true, completion: nil) 
} 

// Helper for showing an alert 
func showAlert(title : String, message: String) { 
    let alert = UIAlertController(
     title: title, 
     message: message, 
     preferredStyle: UIAlertControllerStyle.Alert 
    ) 
    let ok = UIAlertAction(
     title: "OK", 
     style: UIAlertActionStyle.Default, 
     handler: nil 
    ) 
    alert.addAction(ok) 
    presentViewController(alert, animated: true, completion: nil) 
} 
  1. zuletzt Abmelde mit

    func logout(){ 
    //logout code 
    GTMOAuth2ViewControllerTouch.removeAuthFromKeychainForName(kKeychainItemName) 
    navigationController?.popViewControllerAnimated(true) 
    } 
    

das ist die vollständige Implementierung

+0

Ich habe versucht, mit Ihrem Code gibt mir Fehler "Verwendung von unaufgelösten Bezeichner 'GTMOAuth2ViewControllerTouch'." Ich benutze xcode 7.3 Swift 2.2 sieht. –

+0

@vishalaanuj: Jetzt versuchen –