Hallo,
Bitte sag mir. Ich habe ein Problem.
Bei Anfrage in func login erhalte ich eine SMS mit dem Code, den ich in Credentials.code = "121332" eingetragen habe.
Ich kann diesen Code nicht zurücksenden. Wie es geht? Was mache ich falsch?
Das ist mein Code
Klasse ViewController: UIViewController {
let handler = APIHandler()
override func viewDidLoad() {
super.viewDidLoad()
login()
}
func login() {
var credentials = Credentials(username: "username", password: "password", verifyBy: .text)
credentials.code = "121332"
handler.authenticate(with: .user(credentials)) { [weak self] in
switch $0 {
case .success(let response, _):
print("Login successful.")
guard let key = response.persist() else { return print("`Authentication.Response` could not be persisted.") }
UserDefaults.standard.set(key, forKey: "current.account")
UserDefaults.standard.synchronize()
self?.getCurrentUser()
case .failure(let error):
if error.requiresInstagramCode {
} else {
}
}
}
}
func getCurrentUser() {
self.handler.users.user(.me) { ( result: Result<User?, Error>) in
switch result {
case .success(let user):
let username = user?.name ?? "John Doe"
print("success, username: \(username)")
case .failure(let error):
print("failure, error: \(error.localizedDescription)")
}
}
}
}
Sie müssen credentials.code = "121332"
nachdem der Authentifizierungshandler .failure(let error)
zurückgibt.
Es könnte eine gute Option sein, es innerhalb von if error.requiresInstagramCode { }
asynchron zu machen.
Problem besteht weiterhin
https://prnt.sc/pgyf15
sendet diesen Code anscheinend nicht
Versuchen Sie es ohne den Haltepunkt. Auf diese Weise stoppen Sie den Code tatsächlich, wenn er diese Zeile erreicht, sodass keine Anforderung weitergegeben werden kann, wenn sich credentials.code
ändert. :erröten:
Wenn es immer noch nichts ändert, versuchen Sie auch, credentials
beizubehalten (obwohl dies kein Problem sein sollte, wie ich aus Ihrem Snippet sehen kann, tbh).
https://prnt.sc/pgynah
Problem besteht immer noch. Ich möchte Sie darauf aufmerksam machen, dass ich die Anmeldeinformationen an .user weitergebe, denn wenn es .credentials gibt (wie im Beispiel), tritt ein Fehler auf
.user
ist der richtige Weg.
.credentials
wurde in development
und ich habe vergessen, es zu ändern. Danke für den Hinweis. Ich werde es gleich ändern.
Ich bekomme den Fehler immer noch nicht, weil ich es auf meine Weise teste und alles funktioniert wie beabsichtigt
Da ich es in Ihrem letzten Screenshot nicht sehen kann, funktioniert es wirklich nicht, wenn Sie credentials
diese Weise beibehalten und dann code
aktualisieren, nachdem die Error
die es erfordern ?
Denn das scheint das einzige zu sein, was du anders machst, tbh
Wenn ich .credentials verwende, habe ich diesen Fehler https://prnt.sc/pgyvlx
Ich habe meinen gesamten Code in der Hauptnachricht gepostet.
Mache ich etwas falsch?
Wie testet man das Zurücksenden einer Nachricht?
.user
ist das richtige, .credentials
wurde aus Versehen in der Dokumentation aufbewahrt.
Verschieben Sie Ihre Erklärung von credentials
unter die von handler
. Als "einbehaltenes" Eigentum.
Dann sollte es funktionieren.
let handler = APIHandler()
let credentials = Credentials( … )
func login() {
…
}
Es ist alles Code, es ist sowieso ein Fehler (
UIKit importieren
SwiftyInsta importieren
Klasse ViewController: UIViewController {
let-Handler = APIHandler()
var Credentials = Credentials(Benutzername: "Benutzername", Passwort: "Passwort", VerifyBy: .text)
override func viewDidLoad() {
super.viewDidLoad()
login()
}
func login() {
handler.authenticate(with: .user(credentials)) { [weak self] in
switch $0 {
case .success(let response, _):
print("Login successful.")
guard let key = response.persist() else { return print("`Authentication.Response` could not be persisted.") }
UserDefaults.standard.set(key, forKey: "current.account")
UserDefaults.standard.synchronize()
self?.getCurrentUser()
case .failure(let error):
if error.requiresInstagramCode {
self!.credentials.code = "178063"
} else {
}
}
}
}
func getCurrentUser() {
self.handler.users.user(.me) { ( result: Result<User?, Error>) in
switch result {
case .success(let user):
let username = user?.name ?? "John Doe"
print("success, username: \(username)")
case .failure(let error):
print("failure, error: \(error.localizedDescription)")
}
}
}
}
Und was ist diesmal der Fehler? @rmelnik7777
2019-10-09 17:32:25.333892+0300 TestInsta[9747:281440] [] nw_connection_receive_internal_block_invoke [C1] Empfangsantwort fehlgeschlagen mit Fehler "Operation abgebrochen"
Das sieht tatsächlich aus wie eine Art _Xcode_-Warnung, nicht etwas, das SwiftyInsta
generiert hat 🤔
Ich habe ein ähnliches Problem. Es ist nicht klar, wie Sie in den Fehlerblock gelangen, um einen Autorisierungscode von SMS zu setzen. Können Sie mit einem Beispiel helfen?
Hallo ich habe auch das gleiche Problem. Können Sie eine funktionierende Beispielanwendung für die Zwei-Faktor-Authentifizierung teilen?
@sbertix wird bald ein klares Beispiel posten.
Sei geduldig.
Tut mir leid, dass ich es noch nicht geschafft habe, ein Beispiel zu posten, ich war sehr beschäftigt.
Ich hoffe, ich kann bald einen posten.
Ich bin ganz neu bei Swift, aber vielleicht habe ich den Fehler gefunden:
user
(Instanz von Credentials
) und legen den Wert der Handler-Eigenschaft fest.Credentials
, daher ist der Wert der Eigenschaft handler
nicht festgelegt. Die Funktion authentification.code()
wird nicht aufgerufen.Ich hatte keine Gelegenheit, es weiter zu untersuchen, aber es könnte genauso gut sein. Anscheinend sind beim aktuellen Commit Credentials
als struct
und nicht als class
deklariert, was die Prämisse der ganzen Sache mit dem Übergeben von Referenzen war.
Es ist anscheinend etwas, das ich entweder auf dem Weg in meiner lokalen Version behoben habe, oder einige Änderungen, die ich auf dem Weg zu master
verschoben habe, oder möglicherweise nicht einmal das Problem an sich.
Ich werde versuchen, alles für #96 zu rezensieren, aber ich hatte in letzter Zeit keine Zeit. Entschuldigung.
@Lyusan
Hilfreichster Kommentar
Tut mir leid, dass ich es noch nicht geschafft habe, ein Beispiel zu posten, ich war sehr beschäftigt.
Ich hoffe, ich kann bald einen posten.