Я недавно создал приложение, но последний шаг - отправить данные на сайт Runkeeper. У моего приложения есть контроллер вида, у него есть кнопка для входа в систему и деавторизации. Но когда я использую Oauth2, откройте сафари для входа в учетную запись для моего приложения. Когда вернетесь с сафари и снова откройте мое приложение. Я не знаю, как проверить, есть ли у меня код авторизации. А также я хочу обменять токен доступа, чтобы опубликовать свои данные на веб-сайте Runkeeper. Но я совершенно не новичок в подключении приложения к API. Я вижу много учебников по API Google API, API YouTube, но они отличаются от 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.
Спасибо заранее.
У меня есть uiwebview внутри моего приложения раньше, но в каком-то учебнике сказано, что мое приложение легко получит учетную запись и пароль пользователя. Они могут подать в суд на меня, если я не смогу дать доказательства, чтобы доказать, что я не записал секрет клиента. Поэтому я решил использовать сафари для получения разрешения. –
Но в основном вы пытаетесь это сделать. Не знаю о юридических последствиях, но вы хотите манипулировать содержимым Runkeeper, обходящим их сайт. С точки зрения пользователей, которая является доверенным лицом, чтобы предоставить вам свои учетные данные, зависит от них (TOS Runkeeper?). Но я предполагаю, что Runkeeper * может * считать вас «фальсифицированным» вводом сайта как нарушение. В любом случае, я уверен, что то, что вы хотите, специально невозможно по дизайну. Было бы опасностью безопасности в iOS, чтобы позволить приложениям получать данные Safari. См. https://www.macstories.net/stories/ios-9-and-safari-view-controller-the-future-of-web-views/ – Gero