8

我正在尝试通过提供的 TWTRComposer 类使用 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!");
        }
    }];
}

这有两个问题:

  1. 当 Twitter 应用程序安装在我的设备上时,会出现 TWTRComposer 对话框,但不久之后,顶部会出现另一个警报,标题为:“没有 Twitter 帐户”,以及以下消息:“没有 Twitter 帐户已配置。您可以在设置中添加或创建 Twitter 帐户。 “我可以关闭此对话框,然后发送推文(成功),但这显然是非常糟糕的用户体验。此外,这个错误对话框很奇怪,因为 iOS 11 的设置中不再有 Twitter。
  2. 当我的设备上没有安装 Twitter 应用程序时,TWTRComposer 对话框根本不会出现。而是立即调用方法中的完成块,showFromViewController结果类型为 TWTRComposerResultCancelled。

我觉得这可能与 Twitter 的登录问题有关。因为我正在开发的应用程序不包括使用 Twitter 注册/登录。然而,我的印象是 TWTRComposer 处理所有的登录。

任何帮助都非常感谢,感谢您的阅读!

4

2 回答 2

7

您是对的:由于 iOS 11 的变化,您需要先登录才能调用TWTRComposer.

iOS 11 不再支持通过内置社交框架使用 Twitter。相反,您可以使用 Twitter Kit 3 发送推文、登录用户并使用 Twitter API。以下指南展示了如何迁移旧代码。

登录(使用以下顺序,如果可能,Twitter for iOS / SFSafariViewController / UIWebView。检查先决条件)然后撰写:

对象:

// 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];
        }
    }];
}

迅速:

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)
        }
    }
}

文件:

于 2017-08-04T22:21:13.857 回答
0

从 2018 年 6 月 12 日起,回调锁定将不再是可选的。iOS 应用的正确回调格式是:

twitterkit-MY_CONSUMER_KEY://

https://developer.twitter.com/en/docs/basics/callback_url.html

于 2018-11-21T09:19:39.973 回答