3

我正在研究Fitbit集成。如何发出请求并授权其 OAuth 2.0 API。我检查了ASIHTTPRequest但它在 ARC 上不可用。我可以用AFNetworking 来做吗?我正在使用Objective-C。

4

1 回答 1

4

它在这里AFNetworking使用AFOAuth2Manager完成是代码

在 ViewController.m 中

#define CLIENT_ID         @"your client id"
#define CONSUMER_SECRET      @"your consumer secret"

使用 safari 开始授权。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://www.fitbit.com/oauth2/authorize?response_type=code&client_id=227FKJ&redirect_uri=http%3A%2F%2Fcallback.com%2Ffitbit&scope=activity%20nutrition%20heartrate%20location%20nutrition%20profile%20settings%20sleep%20social%20weight"]];

获取响应代码NSUserDefaults

NSString *string  = [[NSUserDefaults standardUserDefaults] valueForKey:@"auth_code"];
    NSURL *baseURL = [NSURL URLWithString:@"https://www.fitbit.com/oauth2/authorize"];
    AFOAuth2Manager *OAuth2Manager =
    [[AFOAuth2Manager alloc] initWithBaseURL:baseURL
                                    clientID:CLIENT_ID secret:CONSUMER_SECRET];
    NSDictionary *dict = @{@"client_id":CLIENT_ID, @"grant_type":@"authorization_code",@"redirect_uri":@"http://lampdemos.com/fitbit",@"code":string};

    [OAuth2Manager authenticateUsingOAuthWithURLString:@"https://api.fitbit.com/oauth2/token" parameters:dict success:^(AFOAuthCredential *credential) {
        NSLog(@"Token: %@", credential.accessToken);
        AppDelegate *adddel = (AppDelegate *)[[UIApplication sharedApplication]delegate];
        adddel.credential = credential;
        [self getUserProfileWithCredentials:credential];
    } failure:^(NSError *error) {
        NSLog(@"Error: %@", error);
    }];

致电进一步要求

-(void)getUserProfileWithCredentials:(AFOAuthCredential*)credential{
    NSURL *baseURL = [NSURL URLWithString:@"https://www.fitbit.com/oauth2/authorize"];

    AFHTTPRequestOperationManager *manager =
    [[AFHTTPRequestOperationManager alloc] initWithBaseURL:baseURL];
    [manager.requestSerializer setAuthorizationHeaderFieldWithCredential:credential];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    [manager GET:@"https://api.fitbit.com/1/user/-/profile.json"
      parameters:nil
         success:^(AFHTTPRequestOperation *operation, id responseObject) {

             NSDictionary *dictResponse = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
             NSDictionary *userDict  =[dictResponse valueForKey:@"user"];
            NSLog(@"Success: %@", userDict);
             NSMutableString *str =[NSMutableString stringWithFormat:@"%@",@""];
             for (NSString *key in [userDict allKeys]) {
                 [str appendFormat:@"%@ %@\n",key,[NSString stringWithFormat:@"%@",[userDict valueForKey:key]]];
             }
             self.profileDetails.text =str;

         }
         failure:^(AFHTTPRequestOperation *operation, NSError *error) {
             NSLog(@"Failure: %@", error);
         }];
}
于 2016-02-13T12:50:46.243 回答