我最近构建了一个应用程序,但最后一步是将数据发布到Runkeeper网站。我的应用程序有视图控制器,它有登录和取消授权的按钮。但是,当我使用Oauth2打开safari登录我的应用程序的帐户。从野生动物园回来并重新打开我的应用程序。我不知道如何检查我是否有授权码。而且我还想交换访问令牌以将我的数据发布到Runkeeper网站。但我完全不知道将应用程序与API连接。我看过很多关于google API,youtube API的教程,但它们与Runkeeper不同。这是我的代码:
- (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.如何从safari获取授权代码以及如何检查我是否已获得授权代码。 2.我听说授权码不稳定,因此如何交换访问令牌以及如何检查访问令牌已过期。如果过期,如何获得另一个。 3.如何通过JSON将数据从核心数据发布到Runkeeper网站。
先谢谢。
答案 0 :(得分:0)
您是否必须在Safari中打开该网站?我不确定甚至可以从这样的其他应用程序中获取数据,特别是如果它不在您自己定义的应用程序组中(并且您只能将自己的应用程序放入这样的组中) 。基本上Safari就是沙盒,就像你的应用程序一样。我不知道如何将从页面加载的数据返回给您的应用。
相反,我会建议您使用WKWebView
在您的应用中为此目的设计自己的小浏览器窗口。然后,您可以跳过[[UIApplication sharedApplication] openURL:url]
,而是打开另一个加载Runkeeper页面的视图。从那里你应该能够通过评估java脚本(或为此注入你自己的脚本)来访问数据。我自己也不认识Runkeeper,所以我不知道你会怎么做,但我确定有某种方式。
这是更多的工作,但是您的用户不必为了授权而切换应用程序。
哦,所有这些假设您必须加载页面并且不能使用Runkeeper提供的某些API。也许您也可以使用NSURLSessionDataTask
来调用授权,只需在返回时从NSHTTPURLResponse
对象获取令牌?