Вход в систему с помощью Twitter на iOS

#ios #swift #twitter #twitter-fabric #twitterkit

#iOS #swift #Twitter #twitter-fabric #twitterkit

Вопрос:

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

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

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

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

Комментарии:

1. Вы можете использовать FHSTwitterEngine для входа в Twitter

2. @Jecky спасибо. Я решил это, используя другой метод.

3. @Nemanja не могли бы вы рассказать нам, какой метод вы использовали?

Ответ №1:

 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

Ответ №2:

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

 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
}
 
  • Информация.плист

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

Комментарии:

1. Это не работает для меня, это то же самое, что и в моем вопросе.

2. Да, похоже, это то же самое, но он хорошо работает с sdk, которые устанавливаются с помощью «fabric». Как вы добавили фреймворки Twitter?

3. Да, я добавил twitterkit и fabric kit с помощью pods и установил настройки Twitter, протестированные с помощью plist и программно.

4. Я обновил свой ответ, добавив немного кода, пожалуйста, проверьте, а также сообщите мне версию iOS, на которой вы это тестируете?

5. Да, это именно то, что я сделал. Я тестирую на iOS 10. Итак, мои шаги: 1) удалить учетную запись из настроек. 2) twitter предлагает мне войти в webview, и я вошел в систему. 3) Я выхожу из своего приложения и пытаюсь войти в систему снова. 4) Я получаю всплывающее окно, в котором говорится, что у меня нет действительных учетных данных и что я должен изменить их в настройках. Даже если я их изменю, это все равно не сработает. Метод в моем втором ответе работает так, как ожидалось. Я до сих пор не пробовал то, что Энтони написал в своем ответе.

Ответ №3:

Решил мою проблему, используя метод:

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

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

Ответ №4:

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

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