2016-10-05 6 views
0

私は最近アプリケーションをビルドしましたが、最後のステップはRunkeeperウェブサイトにデータを投稿することです。私のアプリにはView Controllerがあり、ログインして認証を取り消すボタンがあります。しかし、Oauth2を使用して私のアプリのアカウントにログインするSafariを開くと、サファリから戻って来て、私のアプリを開いてください。私は認証コードを持っているかどうかを確認する方法を知らない。また、アクセストークンを交換してデータをRunkeeperのウェブサイトに掲載したいと考えています。しかし、私は完全にAPIとのアプリを接続するための新しいです。私はgoogle API、YouTube APIについて多くのチュートリアルを見てきましたが、それらはRunkeeperとは異なります。これは私のコードです:ios - サファリを使用してログイントークンとアクセストークンを交換して認証コードを取得するにはどうすればよいですか?

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    NSLog(@"View did Load!"); 
    kIDMOAuth2ClientId = @"...."; 
    kIDMOAuth2ClientSecret = @"...."; 
    kIDMOAuth2AuthorizationURL = @"https://runkeeper.com/apps/authorize"; 
    kIDMOAuth2TokenURL = @"https://runkeeper.com/apps/token"; 
    kIDMOAuth2AccountType = @"token";//authorization_code //Runkeeper API 
    kIDMOAuth2SuccessPagePrefix = @"Success"; 
    kIDMOAuth2RedirectURL = @"Landice://"; 
    kIDMOAuth2DeauthorizationURL = @"https://runkeeper.com/apps/de-authorize"; 
    runkeeperButton *runkeeperString=[runkeeperButton getInstance]; 
    NSLog(@"%@", runkeeperString.str); 
    if ((runkeeperString.str == NULL) || [runkeeperString.str isEqualToString:@"Authorize"]) { 
     buttonToggled = YES; 
     [loginandoutButton setTitle:@"Login & Authorize" forState:UIControlStateNormal]; 
     NSLog(@"66666"); 
     NSLog(@"%@", runkeeperString.str); 
    }else if ([runkeeperString.str isEqual:@"Deauthorize"]){ 
     buttonToggled = NO; 
     [loginandoutButton setTitle:@"Deauthorize" forState:UIControlStateNormal]; 
     NSLog(@"77777"); 
     NSLog(@"%@", runkeeperString.str); 
    } 
    loginandoutButton.layer.cornerRadius = 10; 
} 

- (IBAction)toggleButton:(id)sender { 
    runkeeperButton *runkeeperString=[runkeeperButton getInstance]; 
    // "Deauthorize" button clicked 
    if (!buttonToggled) { 
     [sender setTitle:@"Login & Authorize" forState:UIControlStateNormal]; 
     buttonToggled = YES; 
     runkeeperString.str = @"Authorize"; 
    } 
    // "Login & Authorize" button clicked 
    else { 
     [sender setTitle:@"Deauthorize" forState:UIControlStateNormal]; 
     buttonToggled = NO; 
     runkeeperString.str = @"Deauthorize"; 
     //[self requestOAuth2Access]; 

     NSURL *url = [NSURL URLWithString:@"https://runkeeper.com/apps/authorize?response_type=code&client_id=[SOMETHING]&redirect_uri=landice://response&duration=permanent&scope=read"]; 
     [[UIApplication sharedApplication] openURL:url]; 
     if ([[UIApplication sharedApplication] canOpenURL:url]) { 
      [[UIApplication sharedApplication] openURL:url]; 
     } 

     else if (![[UIApplication sharedApplication] canOpenURL:url]) { 
      NSLog(@"%@%@",@"Failed to open url:",[url description]); 
     } 
    } 
} 

私の質問は:サファリから認証コードを取得するにはどのようにして、私はそれを持っているかどうかを確認する方法を 1。 2.認証コードが安定していないと聞きました。アクセストークンの交換方法とアクセストークンの確認方法が期限切れです。有効期限が切れている場合、別の方法を取得する方法。 3. JSONによるコアデータからRunkeeper Webサイトにデータを投稿する方法。

ありがとうございました。

答えて

0

Safariでサイトを開く必要がありますか?このような別のアプリからデータを取得することが可能かどうかは確かではありません。特に、自分で定義したアプリグループにない場合は(自分のアプリをそのようなグループに入れることができます)。基本的にSafariはあなたのアプリのようにサンドボックス化されています。ページから読み込まれたデータをアプリにどのように戻すことができるのか分かりません。

代わりに、WKWebViewを使用して、この目的のためにアプリで独自の小さなブラウザウィンドウを設計するようアドバイスします。その後、[[UIApplication sharedApplication] openURL:url]をスキップし、Runkeeperページをロードする別のビューを開くことができます。そこから、Javaスクリプトを評価してデータにアクセスできるようにする必要があります(またはこれに独自のスクリプトを挿入する)。私はRunkeeperを自分では知らないので、あなたはそれをどのくらい正確に行うのかはわかりませんが、どうにかして道があると確信しています。

これはもっと機能しますが、ユーザーが承認のためにアプリを切り替える必要はありません。

ああ、これは間違いなくページを読み込まなければならないと仮定しており、Runkeeperが提供するAPIを使用することはできません。おそらくNSURLSessionDataTaskを使用して承認を呼び出し、返品時にNSHTTPURLResponseオブジェクトからトークンを取得するだけでも可能でしょうか?

+0

以前私のアプリでuiwebviewを使用していましたが、チュートリアルによると、私のアプリは簡単に顧客のアカウントとパスワードを取得します。私が顧客の秘密を記録していないことを証明する証拠を与えることができなければ、彼らは私を訴えることができます。だから私は許可を得るためにサファリを使うことを選択します。 –

+0

しかし、基本的にはそれを正確に実行しようとしています。法的な意味は考えませんが、Runkeeperのコンテンツを操作してサイトを迂回したいとします。あなたの信用を保証するユーザーの観点から、ランキーパのTOSですか?しかし、私はRunkeeper *があなたに違反としてサイトの入力を「偽造」されていると考えるかもしれないと思います。とにかく、私はあなたが望むものは、設計上特に不可能だと確信しています。アプリがSafariのデータを取得できるようにすることは、iOSのセキュリティ上のリスクとなります。例えば、 https://www.macstories.net/stories/ios-9-and-safari-view-controller-the-future-of-web-views/ – Gero

関連する問題