1

iOS アプリで Fitbit Api からデータを読み取るために、Fitbit に OAuth 認証を実装したいと考えています。アプリを登録し、clientId とクライアント シークレットを取得しました。過去 2 日間からチュートリアル、ライブラリを検索しました。私はそれについて何の考えも持っていません。私に提案してください。

4

1 に答える 1

4

注- https://dev.fitbit.com/docs/oauth2/によると

  • アプリケーションは 2016 年 3 月 14 日までに OAuth 2.0 にアップグレードする必要があります
  • safari または SFSafariViewController を使用して認証ページを開きます

ソリューションはここから始まります

CLIENT_ID、REDIRECT_URI、その他のテキストを正しい情報に置き換えてください

Point1-

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://www.fitbit.com/oauth2/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&scope=activity%20nutrition%20heartrate%20location%20nutrition%20profile%20settings%20sleep%20social%20weight"]];

ログインに成功するとアプリケーションにリダイレクトされるように、適切なスキーム URL を指定します。openURL メソッドでは、OAUTHCODE を取得します

Point2-

このOAUTHCODEを使用してOAUTHTOKENを取得します

-(void)toGetRequestToken:(id)sender
{
    NSString *strCode  = [[NSUserDefaults standardUserDefaults] valueForKey:@"auth_code"];
    NSURL *baseURL = [NSURL URLWithString:@"https://www.fitbit.com/oauth2/authorize"];

AFOAuth2Manager *OAuth2Manager = [AFOAuth2Manager managerWithBaseURL:baseURL clientID:CLIENT_ID secret:CONSUMER_SECRET];
    OAuth2Manager.responseSerializer.acceptableContentTypes = [OAuth2Manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];

    NSDictionary *dict = @{@"client_id":CLIENT_ID, @"grant_type":@"authorization_code",@"redirect_uri":@"Pro-Fit://fitbit",@"code":strCode};
    [OAuth2Manager authenticateUsingOAuthWithURLString:@"https://api.fitbit.com/oauth2/token" parameters:dict success:^(AFOAuthCredential *credential) {

    // you can save this credential object for further use 
    // inside it you can find access token also 
    NSLog(@"Token: %@", credential.accessToken);

   } failure:^(NSError *error) {
    NSLog(@"Error: %@", error);
   }];
}

Point3-

「UserProfile」などの他の FitBit リクエストをヒットできるようになりました --

-(void)getFitbitUserProfile:(AFOAuthCredential*)credential{

    NSURL *baseURL = [NSURL URLWithString:@"https://www.fitbit.com/oauth2/authorize"];

    AFHTTPSessionManager *manager =
    [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL];
    [manager.requestSerializer setAuthorizationHeaderFieldWithCredential:credential];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    [manager GET:@"https://api.fitbit.com/1/user/-/profile.json"
  parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {

    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

          NSDictionary *dictResponse = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
          NSDictionary *userDict  =[dictResponse valueForKey:@"user"];
          NSLog(@"Success: %@", userDict);          
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
          NSLog(@"Failure: %@", error);
    }];
}
于 2016-06-02T10:58:58.200 に答える