无法在iOS 11上使用TwitterKit发送推文

Mik*_*i P 8 twitter ios tweets twitterkit

我试图通过提供的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!");
        }
    }];
}
Run Code Online (Sandbox Code Playgroud)

这有两个问题:

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

我有一种感觉,这可能与Twitter的登录问题有某种关系.我正在处理的应用程序不包括使用Twitter注册/登录.但是,我的印象是TWTRComposer处理所有登录.

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

nat*_*han 7

你是对的:由于iOS 11的变化,你需要在通话前登录TWTRComposer.

iOS 11不再支持通过内置的社交框架使用Twitter.相反,您可以使用Twitter Kit 3来推文,登录用户并使用Twitter API.以下指南介绍了如何迁移旧代码.

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

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];
        }
    }];
}
Run Code Online (Sandbox Code Playgroud)

迅速:

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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

文档:

  • 检查先决条件.奇怪的是,文档指定了以下内容:`TWTRComposer>如果没有登录会话,该类自动处理在控制器中显示日志. (3认同)