2013-05-31 46 views
7

Tôi đã rót qua internet trong nhiều ngày để tìm cách thực hiện điều này.iOS Twitter OAuth đảo ngược

Tôi cần yêu cầu mã thông báo truy cập và bí mật từ twitter để chuyển thông tin này tới máy chủ sẽ xử lý các tweet của người dùng cho ứng dụng của tôi.

Tôi đã được theo liên kết này https://dev.twitter.com/docs/ios/using-reverse-auth

Vấn đề là bước 1. Họ không cung cấp cho bạn một ví dụ về bước 1.

Đây là mã của tôi:

NSURL *url = [NSURL URLWithString:TW_OAUTH_URL_REQUEST_TOKEN]; 
NSDictionary *parameters = @{TW_X_AUTH_MODE_KEY:TW_X_AUTH_MODE_REVERSE_AUTH}; 

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


// Assume that we stored the result of Step 1 into a var 'resultOfStep1' 

NSString *S = resultOfStep1; 
NSDictionary *step2Params = [[NSMutableDictionary alloc] init]; 
[step2Params setValue:@"kfLxMJsk7fqIuy8URhleFg" forKey:@"x_reverse_auth_target"]; 
[step2Params setValue:S forKey:@"x_reverse_auth_parameters"]; 

NSURL *url2 = [NSURL URLWithString:@"https://api.twitter.com/oauth/access_token"]; 
SLRequest *stepTwoRequest = 
[SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodPOST URL:url2 parameters:step2Params]; 

// You *MUST* keep the ACAccountStore alive for as long as you need an ACAccount instance 
// See WWDC 2011 Session 124 for more info. 
self.accountStore = [[ACAccountStore alloc] init]; 

// We only want to receive Twitter accounts 
ACAccountType *twitterType = 
[self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter]; 

// Obtain the user's permission to access the store 
[self.accountStore requestAccessToAccountsWithType:twitterType 
          withCompletionHandler:^(BOOL granted, NSError *error) { 
    if (!granted) { 
     // handle this scenario gracefully 
    } else { 
     // obtain all the local account instances 
     NSArray *accounts = 
     [self.accountStore accountsWithAccountType:twitterType]; 

     // for simplicity, we will choose the first account returned - in your app, 
     // you should ensure that the user chooses the correct Twitter account 
     // to use with your application. DO NOT FORGET THIS STEP. 
     [stepTwoRequest setAccount:[accounts objectAtIndex:0]]; 

     // execute the request 
     [stepTwoRequest performRequestWithHandler: 
      ^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { 
       NSString *responseStr = 
       [[NSString alloc] initWithData:responseData 
            encoding:NSUTF8StringEncoding]; 

       // see below for an example response 
       NSLog(@"The user's info for your server:\n%@", responseStr); 
      }]; 
    } 
}]; 

Tôi đã được cố gắng tìm ra cách tôi xử lý SLRequest trong oder để chuyển nó đến bước 2 từ tài liệu twitter.

Tôi cũng đã sử dụng điều này tại đây: https://github.com/seancook/TWReverseAuthExample

Mã này rất tuyệt vời nhưng rất phức tạp. Mọi sự trợ giúp sẽ rất được trân trọng! Cảm ơn!

Trả lời

2

Đây là một lớp học để giúp thực hiện điều này chỉ với một cuộc gọi phương thức duy nhất trả về một từ điển với bí mật mã thông báo và mã thông báo.

https://github.com/kbegeman/Twitter-Reverse-Auth

Hy vọng điều này sẽ giúp người khác!

+2

nó không làm việc, mặc dù đi vào nếu khối nhưng với giá trị chứng chỉ = " \ n \ n Thông tin đăng nhập xác thực ngược không hợp lệ \ n \ n"; – Abhishek

+0

Không làm việc cho tôi nữa, cùng một lỗi –

3

Lý do bước một không có bất kỳ mã nào là họ giả sử bạn sẽ làm điều này trên máy chủ của bạn hoặc trước khi bàn tay hoặc một cái gì đó như thế. Về cơ bản, bạn cần tạo khóa mà ứng dụng của bạn sẽ sử dụng để chuyển đổi mã thông báo iOS thành mã thông thường.

Có một tập lệnh sẽ thực hiện yêu cầu cho bạn tại đây: http://www.ananseproductions.com/twitter-reverse-auth-headaches/ Được viết bằng ruby ​​để bạn có thể sử dụng một cái gì đó tương tự nếu bạn có một máy chủ ruby.

Cá nhân tôi sẽ yêu cầu ứng dụng của tôi mã thông báo này từ máy chủ của tôi, sau đó gửi yêu cầu tới twitter, sau đó đăng mã thông báo mới trở lại máy chủ của tôi.

2

Kể từ mã này https://github.com/seancook/TWReverseAuthExample, nó khá đơn giản để triển khai trong ứng dụng của riêng bạn. Tôi thích tạo các lớp có thể tái sử dụng, vì vậy tôi không phải triển khai cùng một mã nhiều lần. Thông thường bạn sẽ tạo một số singleton và làm việc với nó trên hướng dẫn sau đây. Tuy nhiên, điểm của hướng dẫn này không phải là để dạy bạn làm thế nào để tạo ra singletons, do đó, vì lợi ích đơn giản, chúng tôi sẽ sử dụng AppDelegate.h/m mà có thể dễ dàng truy cập từ tất cả các ứng dụng.

Tất cả bạn phải làm là như sau:

  1. mở của bạn và dự án Sean Cook (một trong đó URL là ở trên)

  2. Kéo và sao chép Nguồn-> Vendor-> ABOauthCore nhóm vào dự án của bạn

  3. Chọn TWAPIManager.h/m, TWSignedRequest.h/m và sao chép chúng vào dự án của bạn

  4. Thêm mã bên dưới vào AppDelegate của bạn.h tệp

    @property (nonatomic, strong) ACAccountStore * store;

    @property (nonatomic, strong) TWAPIManager * apiManager;

    @property (nonatomic, strong) tài khoản NSArray *;

    - (void) storeAccountWithAccessToken: (NSString *) mã thông báo bí mật: (NSString *) bí mật;

    - (void) thực hiệnReverseAuth: (id) người gửi inView: (UIView *) viewToDisplaySheet;

    - (void) _refreshTwitterTài khoản;

  5. Bây giờ dán các phương pháp sau vào tập tin AppDelegate.m bạn

    - (void) actionSheet: (UIActionSheet *) actionSheet clickedButtonAtIndex: (NSInteger) buttonIndex;

    - (void) _refreshTwitterTài khoản;

    - (void) _obtainAccessToAccountsWithBlock: (void (^) (BOOL)) chặn;

    - (void) thực hiệnReverseAuth: (id) người gửi inView: (UIView *) viewToDisplaySheet;

  6. Trong một số phương thức khởi tạo của tập tin của bạn, hoặc như các ví dụ này trong: `ứng dụng: didFinishLaunchingWithOptions' dán đoạn mã sau:

    _store = [[ACAccountStore alloc] init];

    _apiManager = [[TWAPIManager alloc] init];

    [[NSNotificationCenter defaultCenter] addObserver: tự chọn: @selector (_refreshTwitterAccounts) tên: ACAccountStoreDidChangeNotification object: nil];

  7. Hãy nhớ xóa người quan sát bằng cách sử dụng mã sau. Dán nó trong AppDelegate.m:

    - (void) {dealloc

    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    

    }

  8. Mở tập tin app-Info.plist của bạn và thêm 2 phím chuỗi. Có giá trị của họ từ: https://apps.twitter.com/

    TWITTER_CONSUMER_KEY

    TWITTER_CONSUMER_SECRET

  9. Trong View Controller mà bạn muốn sử dụng để thực hiện tính năng twitter, trong phương pháp viewDidLoad, thêm đoạn mã sau:

    appdelegate * appDelegate = [UIApplication sharedApplication] .delegate;

    [appDelegate _refreshTwitterAccounts];

  10. OK, cuối cùng bạn đã sẵn sàng để khởi động toàn bộ máy.Trong Trình điều khiển Chế độ xem mà bạn muốn sử dụng để triển khai các tính năng twitter, hãy tạo UIButton được gọi là _reverseAuthBtn và tạo một IBAction cho nó. Sau đó, trong số IBAction dán mã sau đây:

    AppDelegate * appDelegate = [UIApplication sharedApplication] .delegate;

    [appĐăng ký thực hiệnReverseAuth: người gửi inView: self.view];

Whew, tôi đoán vậy thôi! Nếu tôi chưa quên bất cứ điều gì, bạn đã có triển khai Oauth của Twitter Reverse và nếu bạn muốn sử dụng nó trong nhiều bộ điều khiển xem, tất cả những gì bạn phải làm là thực hiện các bước 1-8 và sau đó dán mã từ các bước 9 và 10 vào bộ điều khiển xem của bạn.

Trân trọng!