【问题标题】:TWRequest calls on behalf of app?TWRequest 代表应用调用?
【发布时间】:2013-08-18 13:58:57
【问题描述】:

我正在尝试添加一项功能,以允许用户通过 Facebook/Twitter/Google+ 登录并将 cmets 留在我的应用程序中。我也想展示其他已经离开cmets的用户头像。

如果用户之前使用 Twitter 登录,我可以使用 TWRequest 使用 [request setAccount:self.account] 调用 API,但如果没有,则请求返回 "Bad Authentication data"

我在 Twitter 上创建了一个应用程序,我如何将消费者密钥和消费者秘密与 TWRequest 一起使用,还是仅用于用户的 OAuth?

【问题讨论】:

    标签: ios twitter


    【解决方案1】:

    STTwitter 的帮助下使用Application-only authentication 解决了我的问题。

    apiWrapper = [STTwitterAPIWrapper
                  twitterAPIApplicationOnlyWithConsumerKey:@"..."
                  consumerSecret:@"..."];
    
    
    [apiWrapper verifyCredentialsWithSuccessBlock:^(NSString *token) {
        DDLogInfo(@"Twitter App logged in with token: %@",token);
    } errorBlock:^(NSError *error) {
        DDLogCError(@"Twitter verify credentials error %@",error);
    }];
    

    【讨论】:

    • verifyCredentialsWithSuccessBlock: 回调参数是用户名,而不是 OAuth 令牌
    【解决方案2】:

    考虑使用reverse auth.

    反向认证最常见的用例。允许用户使用他们的 OS X 或 iOS Twitter 帐户注册/登录远程服务。

    iOS/OSX     Twitter     Server
    |------------>|             |   reverse auth.
    |< - - - - - -|             |   access tokens
    |             |             | 
    |-------------------------->|   access tokens
    |             |
    |             |<------------|   access Twitter on user's behalf
    |             | - - - - - ->|
    

    这里是如何使用 STTwitter 的反向身份验证:

    STTwitterAPI *twitter = [STTwitterAPI twitterAPIWithOAuthConsumerName:nil
                                                              consumerKey:@"CONSUMER_KEY"
                                                           consumerSecret:@"CONSUMER_SECRET"];
    
    [twitter postReverseOAuthTokenRequest:^(NSString *authenticationHeader) {
    
        STTwitterAPI *twitterAPIOS = [STTwitterAPI twitterAPIOSWithFirstAccount];
    
        [twitterAPIOS verifyCredentialsWithSuccessBlock:^(NSString *username) {
    
            [twitterAPIOS postReverseAuthAccessTokenWithAuthenticationHeader:authenticationHeader
                                                                successBlock:^(NSString *oAuthToken,
                                                                               NSString *oAuthTokenSecret,
                                                                               NSString *userID,
                                                                               NSString *screenName) {
    
                                                                    // use the tokens...
    
                                                                } errorBlock:^(NSError *error) {
                                                                    // ...
                                                                }];
    
        } errorBlock:^(NSError *error) {
            // ...
        }];
    
    } errorBlock:^(NSError *error) {
        // ...
    }];
    

    【讨论】:

    • 我不想登录用户。我只想下载评论过的 Twitter 用户的头像,即使当前用户决定使用 Facebook 或谷歌而不是 Twitter 登录,但由于我无法对 API 进行未经身份验证的调用,我不得不仅使用应用程序授权。
    • @nst 谢谢!在任何地方都找不到文档来检索 OAuth 令牌,先生,你让我很开心
    猜你喜欢
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 2012-11-19
    • 2013-06-10
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    相关资源
    最近更新 更多