我正试图授权iOS和to中的用户使用Twitter。下面是我尝试的方法。
在我的SetttingsViewController类中,我有一个按钮,用户可以点击这个按钮开始TwitterAuthentication。我在一个名为TwitterClient的类中有TwitterClient方法,在一个名为TwitterFClient的类中有FinalizeOauth方法。这是我的课。
TwitterClient.m
-(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
-(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
TwitterClient *twitter = [[TwitterClient alloc] init];
[twitter runInitializeOAuthChoreo];当用户从Web浏览器返回时,我调用了FinalizeOAuth方法。这是如何在AppDelegate中说明的。
AppDelegate.m
- (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;
}我假设有一种更简单的方法来做这件事,我会对代码进行剧烈的修改!
发布于 2014-11-14 21:07:34
看起来,这些值被反转了:
[finalizeOAuthInputs setOAuthTokenSecret:tCall];
[finalizeOAuthInputs setCallbackID:tTAuth];此外,在finalize步骤中,您指定了您的Twitter凭据,但接下来您也要这样做:
[finalizeOAuthInputs setConsumerKey:TWITTER_CONSUMER_KEY];
[finalizeOAuthInputs setConsumerSecret:TWITTER_CONSUMER_SECRET];这是不必要的,因为这些值存储在凭据中(从初始化-oauth流中使用它就可以看出这一点)。你可以完全删除这两行。如果他们因为某种原因不匹配,你的舞蹈表演就会失败。
https://stackoverflow.com/questions/26876132
复制相似问题