twitterKit Блок завершения входа никогда не выполняется

Я пытаюсь опубликовать некоторый контент в твиттере из своего приложения, и, к сожалению, с версии 11, старый способ больше не работает, поэтому я внедряю twitterKit и нахожу некоторые всплески.

Когда у меня не установлено приложение, оно запускает блок завершения, показанный ниже, что странно, потому что мне пришлось отключить предупреждение вручную, так как в предупреждении нет кнопок для этого.

Но моя настоящая проблема в том, что у меня установлено приложение Twitter и я вошел в систему. Но я не могу обнаружить его с помощью комплекта Twitter. И когда я нажимаю кнопку "Поделиться в Twitter", приложение переключается в новое представление, когда мне предлагается подключить мое приложение к моему твиттеру (если я не вошел в систему, у меня есть поле для входа и пароля, но в результате всегда то же самое...) Когда я нажимаю "Connect", представление возвращается к моему приложению, и ничего не происходит, блок завершения никогда не вызывается... Я работаю в iOs 11 и x-code 9, но я попробовал тот же подход с iOs 10, и я получаю тот же результат. Логин в Twitter не обнаружен. Это код, который я запускаю, любая помощь будет оценена:

if (Twitter.sharedInstance().sessionStore.hasLoggedInUsers()) {
    // App must have at least one logged-in user to compose a Tweet
    let composer = TWTRComposerViewController.emptyComposer()
    present(composer, animated: false, completion: {
        print("This code never runs")
    })
} else {
    // Log in
    Twitter.sharedInstance().logIn { session, error in
        if session != nil {
            // Log in succeeded / Never happens
            let composer = TWTRComposerViewController.emptyComposer()
            composer.delegate = self
            self.present(composer, animated: true, completion: {
                print ("This code never runs")
            })
        } else {
            let alert = UIAlertController(title: "No Twitter Accounts Available", message: "You must log in before presenting a composer.", preferredStyle: .alert)

            //Only happens if I don't have the twitter app installed on my device
            self.present(alert, animated: false, completion: {
                print ("not loggued in")

                /*
                 manual dismission of the prompt as it don't have
                 any button
                 */
                sleep(3)
                alert.dismiss(animated: true, completion: nil)

            })
        }
    }
}

В консоли я получаю эту ошибку:[Снимок] Снимок для представления (0x105977000, UIKeyboardImpl), которое не было обработано хотя бы один раз, требует afterScreenUpdates:YES.

РЕДАКТИРОВАТЬ: я решил, добавив этот метод в appDelegate:

func application (_ app: UIApplication, открытый URL: URL, параметры: [UIApplicationOpenURLOptionsKey: Any] = [:]) -> Bool { return Twitter.sharedInstance().application(app, open: url, options: options) }

1 ответ

Решение

Как вы узнали, вам нужно позволить TwitterKit обрабатывать повторное открытие приложения, когда оно перенаправляется обратно из твиттера:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    let twtrHandled = TWTRTwitter.sharedInstance().application(app, open: url, options: options)
    return twtrHandled
}

Если у вас есть несколько наборов, которые могут обрабатывать URL, то я так и поступлю (здесь я использую также Facebook SDK и Branch SDK):

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    let branchHandled = Branch.getInstance().application(app, open: url, options: options)
    let fbHandled = SDKApplicationDelegate.shared.application(app, open: url, options: options)
    let twtrHandled = TWTRTwitter.sharedInstance().application(app, open: url, options: options)
    return branchHandled || fbHandled || twtrHandled
}
Другие вопросы по тегам