2016-11-29 5 views
6

Ich schreibe App mit Swift 3 auf iOS 10. sharedInstance() Methode wirft Fehler zu Konsole, wenn Benutzer Berechtigungen für Konto von Systemen oder Konto nicht konfiguriert ist (z. B. "Unable to authentifizieren mit dem Systemkonto "). Fehler werden auf der Konsole angezeigt, bevor sie geschlossen werden. Ich werde diese Fehler Benutzern in der App z. Alarmiert sein. Dies ist mein Code:Fehler von Twitter.sharedInstance() erhalten Swift 3 iOS 10

Twitter.sharedInstance().logIn { (session, error) in 
       if error != nil { 
       // print(error?.localizedDescription ?? " ") 
        return 
       }) 

ich diesen Fehler:

2016-11-29 14:49:09.023 CarReview[1254:31719] [TwitterKit] did encounter error with message "Unable to authenticate using the system account.": Error Domain=TWTRLogInErrorDomain Code=2 "User allowed permission to system accounts but there were none set up." UserInfo={NSLocalizedDescription=User allowed permission to system accounts but there were none set up.} 
2016-11-29 14:49:09.024 CarReview[1254:31719] [TwitterKit] No matching scheme found. 
2016-11-29 14:49:09.292 CarReview[1254:31719] [TwitterKit] did encounter error with message "Error obtaining user auth token.": Error Domain=TWTRLogInErrorDomain Code=-1 "<?xml version="1.0" encoding="UTF-8"?> 
<hash> 
    <error>Desktop applications only support the oauth_callback value 'oob'</error> 
    <request>/oauth/request_token</request> 
</hash> 
" UserInfo={NSLocalizedDescription=<?xml version="1.0" encoding="UTF-8"?> 
<hash> 
    <error>Desktop applications only support the oauth_callback value 'oob'</error> 
    <request>/oauth/request_token</request> 
</hash> 
} 

Ich möchte zeigen Benutzer dies:. „Konto kann nicht mit dem System authentifizieren Benutzer erlaubt Erlaubnis Systemkonten, aber es wurden keine gesetzt oben."

Antwort

0

Ich bin nicht sicher, ich verstehe, was Sie tun wollen, aber Sie wollen wahrscheinlich das Ergebnis auf dem Hauptthread drucken:

Twitter.sharedInstance().logIn{(session, error) in 
    DispatchQueue.main.async{ 
     if error != nil { 
      print("Failed to login with Twitter/error:", error!.localizedDescription) 
     }else{ 
      print("succeeded") 
     } 
    } 
} 
+0

Nicht was ich meine. Fehler werden auf der Konsole vor den Schließungen angezeigt und ich habe keinen Einfluss darauf. Ich werde diese Fehler dem Benutzer nicht zeigen. Fehler auf der Konsole zeigt sich. –

+0

Wenn Sie nicht möchten, dass es vor dem Schließen auf der Konsole gedruckt wird, müssen Sie DispatchQueue.main.async wie in meiner Antwort hinzufügen. –

+0

Noch habe ich keine Kontrolle mit Fehlern, ich habe Fehler in der Konsole, aber es ist nicht meine Druckfunktion. –

0

OK, verwende ich diesen Code Benutzer über einige Fehler benachrichtigen:

if SLComposeViewController.isAvailable(forServiceType: SLServiceTypeTwitter) { 
      if ACAccountStore().accountType(withAccountTypeIdentifier: ACAccountTypeIdentifierTwitter).accessGranted { 

       Twitter.sharedInstance().logIn{ 
        (session, error) in 
        if error != nil { 
         self.showAlert(title: "Twitter - Error", message: (error?.localizedDescription)!) 
         return 
        } 

        guard let token = session?.authToken else { return } 
        guard let secret = session?.authTokenSecret else { return } 

        let credential = FIRTwitterAuthProvider.credential(withToken: token, secret: secret) 
        FIRAuth.auth()?.signIn(with: credential, completion: { (user, error) in 
         if error != nil { 
          self.showAlert(title: "Firebase (Twitter)", message: (error?.localizedDescription)!) 
          return 
         } 

         self.showAlert(title: "Firebase (Twitter)", message: "Logged to Firebase via Twitter.") 
        }) 
       } 
      } else { 
       showAlert(title: "Twitter - Error", message: "Give access to the system Twitter account.") 
      } 
     } else { 
      showAlert(title: "Twitter - Error", message: "No system accounts set up.") 
     } 

Aber es ist nicht das, was ich will:/

0

Sie müssen withMethods verwenden und geben Sie die systemAccounts verwenden, nicht webbasierte oder alle iOS Twitter Einstellungen zu verwenden. Der folgende Code ist in Swift 3:

twitSharedInstance.logIn(withMethods: .systemAccounts) { (session :TWTRSession?, error :Error?) in 
     if (error != nil) { 
      if (session != nil) { 
       //We have logged into Twitter. 
      } 
     } 
    } 
0

Ich werde versuchen zu erraten, dass Ihre Frage ist eigentlich:

„ich diese Fehler in der Konsole, aber Rückruf wird nicht genannt, so kann ich‘ t einen Benutzer benachrichtigen. Was soll ich tun? "

Sie diese Fehler erhalten, weil Ihre consumerKey und consumerSecret nicht in Info.plist gesetzt wurden. Sie müssen richtig install Twitter SDK

Das, was in den Kommentaren zu logIn(completion:)

@warning This method requires that you have set up your consumerKey and consumerSecret .

Ihre Info.plist sollte so etwas wie dieses haben geschrieben ist (achten Sie auf <key>consumerKey</key> und <key>consumerSecret</key> strings):

<key>Fabric</key> <dict> 
    <key>APIKey</key> 
    <string> YOUR API KEY </string> 
    <key>Kits</key> 
    <array> 
     <dict> 
      <key>KitInfo</key> 
      <dict> 
       <key>consumerKey</key> 
       <string> YOU PROBABLY MISSED YOUR CONSUMER KEY </string> 
       <key>consumerSecret</key> 
       <string> YOU PROBABLY MISSED YOUR CONSUMER SECRET </string> 
      </dict> 
      <key>KitName</key> 
      <string>Twitter</string> 
     </dict> 
    </array> 
</dict> 
10

Ich habe das gleiche Problem wie in der Frage. Ich habe gerade die CallBack URL in die Twitter App eingestellt und die Probleme gelöst.

Gehen Sie zu https://apps.twitter.com/app -> Einstellungen -> Callback URL und Einstellungen zu speichern.

+2

Was muss ich in die Rückruf-URL eingeben? – user3033437

+1

Jede gültige URL, die Sie hinzufügen können. –