私は最近アプリケーションをビルドしましたが、最後のステップは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サイトにデータを投稿する方法。
ありがとうございました。
以前私のアプリでuiwebviewを使用していましたが、チュートリアルによると、私のアプリは簡単に顧客のアカウントとパスワードを取得します。私が顧客の秘密を記録していないことを証明する証拠を与えることができなければ、彼らは私を訴えることができます。だから私は許可を得るためにサファリを使うことを選択します。 –
しかし、基本的にはそれを正確に実行しようとしています。法的な意味は考えませんが、Runkeeperのコンテンツを操作してサイトを迂回したいとします。あなたの信用を保証するユーザーの観点から、ランキーパのTOSですか?しかし、私はRunkeeper *があなたに違反としてサイトの入力を「偽造」されていると考えるかもしれないと思います。とにかく、私はあなたが望むものは、設計上特に不可能だと確信しています。アプリがSafariのデータを取得できるようにすることは、iOSのセキュリティ上のリスクとなります。例えば、 https://www.macstories.net/stories/ios-9-and-safari-view-controller-the-future-of-web-views/ – Gero