在 iOS5 中使用 Twitter 框架提示登录警报?

Posted

技术标签:

【中文标题】在 iOS5 中使用 Twitter 框架提示登录警报?【英文标题】:Prompt login alert with Twitter framework in iOS5? 【发布时间】:2012-03-28 21:40:05 【问题描述】:

大家可能都知道,从 ios5 开始,有一个原生 Twitter 框架可以让您轻松地从您的应用发布推文。

有没有办法提示将用户转发到设置应用并询问用户名和密码的警报?

我知道我可以用下面的代码解决这个问题:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=TWITTER"]];

但那是未记录的代码..

提前致谢

问候比利 (我在 SO 上的第一篇文章)

【问题讨论】:

在 iOS6 中使用 Twitter 框架提示登录警报:***.com/questions/13946062/… 该代码在 iOS 8.2 上不起作用 【参考方案1】:

在 iOS5.1 中,我们应该使用 TWTweetComposeViewController 来显示对话框,因为苹果拒绝使用 prefs:root=TWITTER 的应用程序。

但是,我不喜欢显示推文屏幕和键盘 所以我想出了隐藏它们的方法,但显示弹出屏幕。

更新: Apple 使用这个技巧批准了我的应用程序。

    TWTweetComposeViewController *viewController = [[TWTweetComposeViewController alloc] init];

    //hide the tweet screen
    viewController.view.hidden = YES;

    //fire tweetComposeView to show "No Twitter Accounts" alert view on iOS5.1
    viewController.completionHandler = ^(TWTweetComposeViewControllerResult result) 
        if (result == TWTweetComposeViewControllerResultCancelled)             
            [self dismissModalViewControllerAnimated:NO];
        
    ;
    [self presentModalViewController:viewController animated:NO];

    //hide the keyboard
    [viewController.view endEditing:YES];

    //this approach doesn't work since you can't jump to settings
//    [self dismissModalViewControllerAnimated:NO];

【讨论】:

如果组合视图被隐藏,您的代码如何实际发送推文?【参考方案2】:

您无需实现此功能,如果您设置 Twitter 集成以在 Twitter 上发帖,并且 iOS 检测到没有设置 Twitter 帐户,它会自动为您执行此操作!

这是我在 iOS 5.1 的 iPhone 4S 上运行的一个应用的屏幕截图

首选项链接的删除是针对开发人员的自定义操作,如链接到您自己的首选项菜单。这不适用,因为 Twitter 不仅是 iOS 5 的内置功能,而且弹出通知您的 UIAlertView 不是由开发人员处理的,它是 iOS 的自动功能。

【讨论】:

感谢您的回答,现在我在尝试发帖时收到警报,但我的客户想要一个能够登录 Twitter 的单独设置菜单。也许我应该让我的客户相信最初的想法是错误的,而只使用“标准”行为? 这样最好。这不仅可以为您节省大量工作,而且可以让应用程序保持更好的运行状态,您只需访问现有框架即可。如果这回答了您的问题,请标记为正确。【参考方案3】:

我在这里找到了方法:

如果您的设备设置中没有设置 twitter 帐户,则显示自定义提醒:

    if (![TWTweetComposeViewController canSendTweet]) 
            UIAlertView *alertViewTwitter = [[[UIAlertView alloc] 
            initWithTitle:@"No Twitter Accounts" 
            message:@"There are no Twitter accounts configured. You can add or create a Twitter account in Settings." 
            delegate:self 
            cancelButtonTitle:@"Settings"
            otherButtonTitles:@"Cancel",nil] autorelease];

            [alertViewTwitter show];
   


 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

          if (buttonIndex==0) 
                 TWTweetComposeViewController *ctrl = [[TWTweetComposeViewController alloc] init];
                 if ([ctrl respondsToSelector:@selector(alertView:clickedButtonAtIndex:)]) 
                     [(id <UIAlertViewDelegate>)ctrl alertView:alertView
                             clickedButtonAtIndex:0];
                 
                 [ctrl release];
          
   

希望这会有意义:)

【讨论】:

我不太喜欢使用取消按钮来执行您的操作并将真正的取消按钮放在其他按钮标题的数组中......似乎唯一的好处是简化了 clickedButtonAtIndex: 方法,而你打破了一个非常普遍的惯例。【参考方案4】:

这是不可能的,尽管如果用户尚未登录,它应该自动要求用户登录。

截至iOS 5.1,该功能已被删除,如here所示

【讨论】:

以上是关于在 iOS5 中使用 Twitter 框架提示登录警报?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 5.1 模拟器 Twitter 登录问题

为 iOS4.3 和 iOS5.0 构建的问题

我可以在 iOS 中自定义 Twitter 工具包的登录按钮吗?

为 IOS 4.3 集成 Twitter SDK

iOS5 模式登录不再在 XCode 4.2 中启动

是否使用 google/facebook/twitter 身份验证登录?还是授权?