Войти через Twitter на iOS

У меня проблема со входом в твиттер на iOS. Если у пользователя есть учетная запись, установленная в приложении «Настройки», я получаю следующую ошибку:

[TwitterKit] обнаружил ошибку с сообщением «Учетные данные системной учетной записи пользователя недействительны.»: Error Domain = TWTRLogInErrorDomain Code = 7 «Учетные данные системной учетной записи больше не действительны, их необходимо обновить в приложении« Настройки ». UserInfo = {NSLocalizedDescription = Учетные данные системного аккаунта больше недействительны и их необходимо обновить в приложении "Настройки". NSLocalizedRecoverySuggestion = Пользователю было предложено посетить приложение "Настройки".}

И учетные данные действительны, я это дважды проверяю. Если в приложении «Настройки» нет учетной записи, мой вход будет выполнен должным образом. Я вызываю следующий метод:

Twitter.sharedInstance().logInWithCompletion {(session, error) -> Void in

person Nemanja    schedule 13.10.2016    source источник
comment
Вы можете использовать FHSTwitterEngine для входа в Twitter   -  person Jitendra Modi    schedule 13.10.2016
comment
@ Джеки, спасибо. Я решил это другим методом.   -  person Nemanja    schedule 13.10.2016
comment
@Nemanja, не могли бы вы рассказать нам, какой метод вы использовали?   -  person Ranbeuer    schedule 29.03.2018


Ответы (4)


Twitter.sharedInstance().logIn { session, error in
        if (session != nil)
        {
            print("signed in as \(session!.userName)");
            let client = TWTRAPIClient.withCurrentUser()
            let request = client.urlRequest(withMethod: "GET",
                url: "https://api.twitter.com/1.1/account/verify_credentials.json",
                parameters: ["include_email": "true", "skip_status": "true"],
                error: nil)
            client.sendTwitterRequest(request)
            { response, data, connectionError in
                print(response)
            }
        }
        else
        {
            print("error: \(error!.localizedDescription)");
        }
        }
    }

это помогает мне в swift3

person Akash Soneji    schedule 13.10.2016

Я думаю, что следующий метод тоже должен работать.

Twitter.sharedInstance().logIn(withCompletion: {(session: TWTRSession, error: Error) -> Void in
    if session {
        print("@\(session.userName()) logged in! (\(session.userID()))")
    }
    else {
        print("error: \(error!.localizedDescription)")
    }
})

Он принимает учетные данные из приложения Настройки Twitter.

Подробнее: - AppDelegate.m

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]) -> Bool {
    //Twitter
    Twitter.sharedInstance().start(with: kTwitterConsumerKey, consumerSecret: kTwitterConsumerSecret)
    Fabric.with([Twitter.sharedInstance()])
    return true
}
  • Info.plist

введите описание изображения здесь

person Suhas Arvind Patil    schedule 13.10.2016
comment
У меня это не работает, это то же самое, что и в моем вопросе. - person Nemanja; 13.10.2016
comment
Да, похоже, это то же самое, но он хорошо работает с SDK, которые устанавливаются с использованием «ткани». Как вы добавили фреймворки Twitter? - person Suhas Arvind Patil; 13.10.2016
comment
Да, я добавил twitterkit и fabric kit, используя pods, и установил настройки twitter, протестировал с помощью plist и программно. - person Nemanja; 13.10.2016
comment
Я обновил свой ответ, добавив немного кода, пожалуйста, проверьте, а также сообщите мне версию iOS, на которой вы это тестируете? - person Suhas Arvind Patil; 13.10.2016
comment
Ага, это именно то, что я сделал. Тестирую на iOS 10. Итак, мои шаги: 1) удалить аккаунт из настроек. 2) Twitter предлагает мне войти в систему в веб-просмотре, и я вошел в систему. 3) Я выхожу из своего приложения и пытаюсь войти снова. 4) Я получаю всплывающее окно с сообщением, что у меня нет действительных учетных данных, и я должен изменить их в настройках. Даже если я их изменю, все равно не работает. Метод из моего второго ответа работает должным образом. Я до сих пор не пробовал то, что написал Энтони в своем ответе. - person Nemanja; 13.10.2016
comment
вы добавили строку [[Twitter sharedInstance] logOut]; когда вы действительно выходите из системы. - person Suhas Arvind Patil; 13.10.2016
comment
Хм, я этого не делал, может быть, так оно и есть. Но без добавления выхода из системы, метод в моем другом ответе работает. - person Nemanja; 17.10.2016

Решил мою проблему с помощью метода:

Twitter.sharedInstance().logInWithMethods(TWTRLoginMethod.WebBased, completion: {(session, error) -> Void in

Но все же думаю, что другой метод тоже должен работать.

person Nemanja    schedule 13.10.2016

Мне понравилось использовать приведенный ниже код, может быть, это справка

 TWTRTwitter.sharedInstance().logIn(with: self, completion: { session, error in
        if (session != nil) {
            let client = TWTRAPIClient.withCurrentUser()
          }
   }
person Waliyan    schedule 31.07.2018