首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OAuth在Temboo中的故障

OAuth在Temboo中的故障
EN

Stack Overflow用户
提问于 2014-11-11 22:53:23
回答 1查看 131关注 0票数 0

我正试图授权iOS和to中的用户使用Twitter。下面是我尝试的方法。

在我的SetttingsViewController类中,我有一个按钮,用户可以点击这个按钮开始TwitterAuthentication。我在一个名为TwitterClient的类中有TwitterClient方法,在一个名为TwitterFClient的类中有FinalizeOauth方法。这是我的课。

TwitterClient.m

代码语言:javascript
复制
-(void)runInitializeOAuthChoreo {
    // Instantiate the Choreo, using a previously instantiated TembooSession object, eg:
    TMBTembooSession *session = [[TMBTembooSession alloc] initWithAccount:@"prnk28" appKeyName:@"Floadt" andAppKeyValue:@"9b9031d182d7441da05f8214ba2c7170"];

    // Create the choreo object using your Temboo session
    TMBTwitter_OAuth_InitializeOAuth *initializeOAuthChoreo = [[TMBTwitter_OAuth_InitializeOAuth alloc] initWithSession:session];

    // Get Inputs object for the choreo
    TMBTwitter_OAuth_InitializeOAuth_Inputs *initializeOAuthInputs = [initializeOAuthChoreo newInputSet];

    // Set credential to use for execution
    [initializeOAuthInputs setCredential:@"Twitter"];

    // Set inputs
    [initializeOAuthInputs setForwardingURL:@"floadt://success"];

    // Execute choreo specifying this class as the choreo delegate
    [initializeOAuthChoreo executeWithInputs:initializeOAuthInputs delegate:self];
}

// TMBChoreographyDelegate method implementation - handle choreo errors
-(void)choreographyDidFailWithError:(NSError*)error {
    // Log error to the console
    NSLog(@"Error - %@", error);
}

// TMBChoreographyDelegate method implementation - choreo executed successfully
-(void)choreographyDidFinishExecuting:(TMBTwitter_OAuth_InitializeOAuth_ResultSet*)result {
    // Log results to the console
   // NSLog(@"%@", [result getAuthorizationURL]);
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[result getAuthorizationURL]]];

    NSUserDefaults *user = [NSUserDefaults standardUserDefaults];

    NSString *callbackid = [result getCallbackID];
    [user setObject:callbackid forKey:@"TwitterCallbackID"];
    [user synchronize];

    NSString *oauthtokensecret = [result getOAuthTokenSecret];
    [user setObject:oauthtokensecret forKey:@"TwitterTemporaryOAuth"];
    [user synchronize];

}

TwitterFClient.m

代码语言:javascript
复制
-(void)runFinalizeOAuthChoreo {
    // Instantiate the Choreo, using a previously instantiated TembooSession object, eg:
    TMBTembooSession *session = [[TMBTembooSession alloc] initWithAccount:@"prnk28" appKeyName:@"Floadt" andAppKeyValue:@"9b9031d182d7441da05f8214ba2c7170"];

    // Create the choreo object using your Temboo session
    TMBTwitter_OAuth_FinalizeOAuth *finalizeOAuthChoreo = [[TMBTwitter_OAuth_FinalizeOAuth alloc] initWithSession:session];

    // Get Inputs object for the choreo
    TMBTwitter_OAuth_FinalizeOAuth_Inputs *finalizeOAuthInputs = [finalizeOAuthChoreo newInputSet];

    // Set credential to use for execution
    [finalizeOAuthInputs setCredential:@"Twitter"];

    // Set inputs
    NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
    NSString *tCall = [user stringForKey:@"TwitterCallbackID"];
    NSString *tTAuth = [user stringForKey:@"TwitterTemporaryOAuth"];
    [finalizeOAuthInputs setOAuthTokenSecret:tCall];
    [finalizeOAuthInputs setCallbackID:tTAuth];
    [finalizeOAuthInputs setConsumerKey:TWITTER_CONSUMER_KEY];
    [finalizeOAuthInputs setConsumerSecret:TWITTER_CONSUMER_SECRET];

    // Execute choreo specifying this class as the choreo delegate
    [finalizeOAuthChoreo executeWithInputs:finalizeOAuthInputs delegate:self];
}

// TMBChoreographyDelegate method implementation - handle choreo errors
-(void)choreographyDidFailWithError:(NSError*)error {
    // Log error to the console
    NSLog(@"Error - %@", error);
}

// TMBChoreographyDelegate method implementation - choreo executed successfully
-(void)choreographyDidFinishExecuting:(TMBTwitter_OAuth_FinalizeOAuth_ResultSet*)result {
    // Log results to the console
    NSLog(@"%@", [result getAccessTokenSecret]);
    NSLog(@"%@", [result getAccessToken]);
    NSLog(@"%@", [result getScreenName]);
    NSLog(@"%@", [result getUserID]);
}

这是两个客户端类。我相信,在Facebook的例子中,两者都是结合在一起的,这会是建议的做法吗?

无论如何,在SettingsViewController类中调用这些方法是这样的:

SettingsViewController.m

代码语言:javascript
复制
TwitterClient *twitter = [[TwitterClient alloc] init];
[twitter runInitializeOAuthChoreo];

当用户从Web浏览器返回时,我调用了FinalizeOAuth方法。这是如何在AppDelegate中说明的。

AppDelegate.m

代码语言:javascript
复制
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation
{

    NSString *daURL = [url absoluteString];
 //   NSString *instagram;
    NSString *twitter;

    twitter = [daURL substringWithRange: NSMakeRange (0, 16)];
   //  instagram = [daURL substringWithRange:NSMakeRange(0, 27)];

    if ([daURL isEqual: @"floadt://success"]) {
        TwitterFClient *fo = [[TwitterFClient alloc] init];
        [fo runFinalizeOAuthChoreo];
    }else{
        [[InstagramClient sharedClient] handleOAuthCallbackWithURL:url];
    }

    return YES;
}

我假设有一种更简单的方法来做这件事,我会对代码进行剧烈的修改!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-14 21:07:34

看起来,这些值被反转了:

代码语言:javascript
复制
[finalizeOAuthInputs setOAuthTokenSecret:tCall];
[finalizeOAuthInputs setCallbackID:tTAuth];

此外,在finalize步骤中,您指定了您的Twitter凭据,但接下来您也要这样做:

代码语言:javascript
复制
[finalizeOAuthInputs setConsumerKey:TWITTER_CONSUMER_KEY];
[finalizeOAuthInputs setConsumerSecret:TWITTER_CONSUMER_SECRET];

这是不必要的,因为这些值存储在凭据中(从初始化-oauth流中使用它就可以看出这一点)。你可以完全删除这两行。如果他们因为某种原因不匹配,你的舞蹈表演就会失败。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26876132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档