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
}