无法在 iOS 11 上使用 TwitterKit 发送推文
Not able to send a Tweet with TwitterKit on iOS 11
我正在尝试通过提供的 TWTRComposer class 使用 TwitterKit 撰写推文。这是我调用的函数:
-(void) tweet:(UIViewController *) root {
TWTRComposer *composer = [[TWTRComposer alloc] init];
[composer setText:@"just setting up my Twitter Kit"];
// Called from a UIViewController
[composer showFromViewController:root completion:^(TWTRComposerResult result) {
if (result == TWTRComposerResultCancelled) {
NSLog(@"Tweet composition cancelled");
}
else {
NSLog(@"Sending Tweet!");
}
}];
}
这有两个问题:
- 当我的设备上安装了 Twitter 应用程序时,会出现 TWTRComposer 对话框,但不久之后,顶部会出现另一个警告,标题为:“没有 Twitter 帐户”和以下消息:“没有配置 Twitter 帐户。您可以在“设置”中添加或创建 Twitter 帐户。”
我可以关闭这个对话框,然后发送推文(成功),但这显然是非常糟糕的用户体验。此外,这个错误对话框很奇怪,因为 iOS 11 在设置中不再有 Twitter。
- 当我的设备未安装 Twitter 应用程序时,TWTRComposer 对话框根本不显示。相反,立即调用
showFromViewController
方法中的完成块,结果类型为 TWTRComposerResultCancelled。
我感觉这可能与 Twitter 的登录问题有某种关系。因为我正在开发的应用程序不包含 Signup/Login 和 Twitter。但是,我的印象是 TWTRComposer 处理所有登录。
非常感谢任何帮助,感谢您的阅读!
你是对的:由于iOS11的变化,调用TWTRComposer
前需要登录。
iOS 11 no longer supports using Twitter through the built-in social framework. Instead, you can use Twitter Kit 3 to Tweet, log in users, and use the Twitter API. The following guide shows how to migrate your old code.
登录(按照以下顺序,如果可能的话,Twitter for iOS / SFSafariViewController / UIWebView。勾选prerequisites)然后撰写:
ObjC:
// Check if current session has users logged in
if ([[Twitter sharedInstance].sessionStore hasLoggedInUsers]) {
TWTRComposerViewController *composer = [TWTRComposerViewController emptyComposer];
[fromController presentViewController:composer animated:YES completion:nil];
} else {
[[Twitter sharedInstance] logInWithCompletion:^(TWTRSession *session, NSError *error) {
if (session) {
TWTRComposerViewController *composer = [TWTRComposerViewController emptyComposer];
[fromController presentViewController:composer animated:YES completion:nil];
} else {
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"No Twitter Accounts Available" message:@"You must log in before presenting a composer." preferredStyle:UIAlertControllerStyleAlert];
[self presentViewController:alert animated:YES completion:nil];
}
}];
}
Swift:
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: true, completion: nil)
} else {
// Log in, and then check again
Twitter.sharedInstance().logIn { session, error in
if session != nil { // Log in succeeded
let composer = TWTRComposerViewController.emptyComposer()
self.present(composer, animated: true, completion: nil)
} else {
let alert = UIAlertController(title: "No Twitter Accounts Available", message: "You must log in before presenting a composer.", preferredStyle: .alert)
self.present(alert, animated: false, completion: nil)
}
}
}
文档:
从 2018 年 6 月 12 日起,回调锁定将不再是可选的。 iOS 个应用的正确回调格式是:
twitterkit-MY_CONSUMER_KEY://
https://developer.twitter.com/en/docs/basics/callback_url.html
我正在尝试通过提供的 TWTRComposer class 使用 TwitterKit 撰写推文。这是我调用的函数:
-(void) tweet:(UIViewController *) root {
TWTRComposer *composer = [[TWTRComposer alloc] init];
[composer setText:@"just setting up my Twitter Kit"];
// Called from a UIViewController
[composer showFromViewController:root completion:^(TWTRComposerResult result) {
if (result == TWTRComposerResultCancelled) {
NSLog(@"Tweet composition cancelled");
}
else {
NSLog(@"Sending Tweet!");
}
}];
}
这有两个问题:
- 当我的设备上安装了 Twitter 应用程序时,会出现 TWTRComposer 对话框,但不久之后,顶部会出现另一个警告,标题为:“没有 Twitter 帐户”和以下消息:“没有配置 Twitter 帐户。您可以在“设置”中添加或创建 Twitter 帐户。” 我可以关闭这个对话框,然后发送推文(成功),但这显然是非常糟糕的用户体验。此外,这个错误对话框很奇怪,因为 iOS 11 在设置中不再有 Twitter。
- 当我的设备未安装 Twitter 应用程序时,TWTRComposer 对话框根本不显示。相反,立即调用
showFromViewController
方法中的完成块,结果类型为 TWTRComposerResultCancelled。
我感觉这可能与 Twitter 的登录问题有某种关系。因为我正在开发的应用程序不包含 Signup/Login 和 Twitter。但是,我的印象是 TWTRComposer 处理所有登录。
非常感谢任何帮助,感谢您的阅读!
你是对的:由于iOS11的变化,调用TWTRComposer
前需要登录。
iOS 11 no longer supports using Twitter through the built-in social framework. Instead, you can use Twitter Kit 3 to Tweet, log in users, and use the Twitter API. The following guide shows how to migrate your old code.
登录(按照以下顺序,如果可能的话,Twitter for iOS / SFSafariViewController / UIWebView。勾选prerequisites)然后撰写:
ObjC:
// Check if current session has users logged in
if ([[Twitter sharedInstance].sessionStore hasLoggedInUsers]) {
TWTRComposerViewController *composer = [TWTRComposerViewController emptyComposer];
[fromController presentViewController:composer animated:YES completion:nil];
} else {
[[Twitter sharedInstance] logInWithCompletion:^(TWTRSession *session, NSError *error) {
if (session) {
TWTRComposerViewController *composer = [TWTRComposerViewController emptyComposer];
[fromController presentViewController:composer animated:YES completion:nil];
} else {
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"No Twitter Accounts Available" message:@"You must log in before presenting a composer." preferredStyle:UIAlertControllerStyleAlert];
[self presentViewController:alert animated:YES completion:nil];
}
}];
}
Swift:
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: true, completion: nil)
} else {
// Log in, and then check again
Twitter.sharedInstance().logIn { session, error in
if session != nil { // Log in succeeded
let composer = TWTRComposerViewController.emptyComposer()
self.present(composer, animated: true, completion: nil)
} else {
let alert = UIAlertController(title: "No Twitter Accounts Available", message: "You must log in before presenting a composer.", preferredStyle: .alert)
self.present(alert, animated: false, completion: nil)
}
}
}
文档:
从 2018 年 6 月 12 日起,回调锁定将不再是可选的。 iOS 个应用的正确回调格式是:
twitterkit-MY_CONSUMER_KEY://
https://developer.twitter.com/en/docs/basics/callback_url.html