实施twitter的最佳方式

时间:2013-09-12 09:36:09

标签: ios objective-c twitter

1)我从这个链接Twitter with OAuth找到了Twitter紧急示例代码 为了整合。

我添加了消费者密钥和密钥。但它从未授权该应用程序。

2)如果我使用共享工具包,则会出现从Twitter请求访问时出现问题的错误                                                                                                                                        3)如果我使用社交框架,那么如果用户未在设置中添加他/她的帐户,它将发出警报。

我需要用户不要在应用程序之外进行Twitter登录。

有没有人知道什么是与twitter集成的最佳方式?

请帮忙。

2 个答案:

答案 0 :(得分:3)

我希望这会对你有所帮助。 。

1.将以下课程添加到您的项目中 GTMOAuthAuthentication.h /米 GTMOAuthSignIn.h /米 GTMHTTPFetcher.h /米 GTMOAuthViewControllerTouch.h /米 GTMOAuthViewTouch.xib

2。添加以下框架 Security.framework和SystemConfiguration.framework。

3.set -ObjC构建选项,用于应用程序目标的“其他链接器标志”。

4。然后是时候进行一些编码了。

导入GTMOAuthAuthentication.h和GTMOAuthViewControllerTouch.h

- (void)signInWithTwitter
{
NSURL *requestURL = [NSURL URLWithString:@"https://api.twitter.com/oauth/request_token"];
NSURL *accessURL = [NSURL URLWithString:@"https://api.twitter.com/oauth/access_token"];
NSURL *authorizeURL = [NSURL URLWithString:@"https://api.twitter.com/oauth/authorize"];
NSString *scope = @"http://api.twitter.com/";

GTMOAuthAuthentication *auth = [self authForTwitter];

[auth setCallback:@"http://www.noop.com/OAuthCallback"];

GTMOAuthViewControllerTouch *viewController;

viewController = [[GTMOAuthViewControllerTouch alloc] initWithScope:scope
                                                             language:nil
                                                      requestTokenURL:requestURL
                                                    authorizeTokenURL:authorizeURL
                                                       accessTokenURL:accessURL
                                                       authentication:auth
                                                       appServiceName:@"AppName : Twitter"
                                                             delegate:self
finishedSelector:@selector(viewController:finishedWithAuth:error:)];

[appDelegate.navigationController pushViewController:viewController animated:YES];
}

- (GTMOAuthAuthentication *)authForTwitter {
GTMOAuthAuthentication *auth = [[GTMOAuthAuthentication alloc] initWithSignatureMethod:kGTMOAuthSignatureMethodHMAC_SHA1
            consumerKey:TWITTER_CONSUMER_KEY
             privateKey:TWITTER_CONSUMER_SECRET];

[auth setServiceProvider:@"Twitter"];

return auth;
}

- (void)viewController:(GTMOAuthViewControllerTouch *)viewController finishedWithAuth:(GTMOAuthAuthentication *)auth error:(NSError *)error {

    if(error)
    {
         //handle error
    }
    else
    {
        // do stuff as per your app.
    }
}

NOte:如果收到“验证oauth签名和令牌失败”等错误消息,请检查系统时间是否正确。

答案 1 :(得分:1)

如果您希望该用户不在外面,您可以使用 ACAccountStore Account.FrameworkSocial.framework进行iOS 6,

 NSUrl *url = [NSURL URLWithString:@"https://api.twitter.com/1.1/users/show.json"];
  NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:twittername,@"screen_name",nil];

     account = [[ACAccountStore alloc] init];
    ACAccountType *twitterAccountType = [account accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
    NSArray *twitterAccounts = [account accountsWithAccountType:twitterAccountType];

    // Runing on iOS 6
    if (NSClassFromString(@"SLComposeViewController") && [SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
    {
        [account requestAccessToAccountsWithType:twitterAccountType options:NULL completion:^(BOOL granted, NSError *error)
         {
             if (granted)
             {

                 SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodGET URL:url                                      parameters:params];

                 [request setAccount:[twitterAccounts lastObject]];

                 dispatch_async(dispatch_get_main_queue(), ^
                                {

                                    [NSURLConnection sendAsynchronousRequest:request.preparedURLRequest queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response1, NSData *data, NSError *error)
                                     {
                                         dispatch_async(dispatch_get_main_queue(), ^
                                                        {
                                                            if (data)
                                                            {
//                                                                [self loadData:data];

                                                                NSString* newStr = [[NSString alloc] initWithData:data
                                                                                                          encoding:NSUTF8StringEncoding];
                                                                NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] ;


                                                                NSLog(@"data:%@",newStr);
                                                            }
                                                        });
                                     }];
                                });
             }
         }];
    }
    else if (NSClassFromString(@"TWTweetComposeViewController") && [TWTweetComposeViewController canSendTweet]) // Runing on iOS 5
    {
        [account requestAccessToAccountsWithType:twitterAccountType withCompletionHandler:^(BOOL granted, NSError *error)
         {
             if (granted)
             {
                 TWRequest *request = [[TWRequest alloc] initWithURL:url parameters:params requestMethod:TWRequestMethodGET];
                 [request setAccount:[twitterAccounts lastObject]];

                 dispatch_async(dispatch_get_main_queue(), ^
                                {
                                    [NSURLConnection sendAsynchronousRequest:request.signedURLRequest queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response1, NSData *data, NSError *error)
                                     {
                                         dispatch_async(dispatch_get_main_queue(), ^
                                                        {                             
                                                            if (data)                                 
                                                            {                                 
                                                                NSString* newStr = [[NSString alloc] initWithData:data
                                                                                                         encoding:NSUTF8StringEncoding];


                                                                NSLog(@"data:%@",newStr);                                                           }
                                                        });
                                     }];


                                });
             }
         }];
    }
}

您必须在.h

中保留 ACAccountStore
@property (nonatomic, strong) ACAccountStore *account;