在 fitbit 授权期间通过 url/ 打开 iOS 应用程序时崩溃
Posted
技术标签:
【中文标题】在 fitbit 授权期间通过 url/ 打开 iOS 应用程序时崩溃【英文标题】:iOS app crashes when opened by url/ during fitbit authorization 【发布时间】:2016-12-05 15:58:11 【问题描述】:我正在尝试在我的 ios 应用中实施 fitbit 授权。具体来说,我正在尝试遵循get authorization from Fitbit using Oauth in iOS 中的步骤。目前,我已遵循第 1 点,我的应用程序重定向到 safari 以登录 fitbit 帐户,然后转换回我的应用程序,该应用程序立即崩溃。
我已将 URL 方案设置为我的应用程序的名称,并且我的回调 URL/重定向 URI 都设置为 myAppName://。我还在我的 AppDelegate 中实现了一个 func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool 方法,它永远不会被调用。
有什么可能导致这种情况的想法吗?
更一般地说:为什么应用程序在通过 url 打开时会崩溃。
【问题讨论】:
【参考方案1】:当您调用 Fitbit 身份验证时,一旦用户输入他的凭据,fitbit 将调用您的回调 url。所以 您需要像这样在您的应用程序委托中处理该回调。
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
NSString *strUrl =[NSString stringWithFormat:@"%@",url];
if ([strUrl containsString:@"#_=_"])
[self saveFitbitCode:url];
return YES;
现在在 saveFitbitCode 方法中,我正在检索 auth_code,然后发送本地通知,因此它将调用另一个函数来获取访问令牌。
-(void)saveFitbitCode:(NSURL *)url
NSString *strUrl =[NSString stringWithFormat:@"%@",url];
NSRange range1 = [strUrl rangeOfString:@"code="];
NSRange range2 = [strUrl rangeOfString:@"#_=_"];
NSRange rSub = NSMakeRange(range1.location + range1.length, range2.location - range1.location - range1.length);
NSString *sub = [strUrl substringWithRange:rSub];
[[NSUserDefaults standardUserDefaults] setObject:sub forKey:@"auth_code"];
[[NSUserDefaults standardUserDefaults] synchronize];
[[NSNotificationCenter defaultCenter] postNotificationName:@"callRequest" object:nil userInfo:nil];
希望对你有帮助。
【讨论】:
以上是关于在 fitbit 授权期间通过 url/ 打开 iOS 应用程序时崩溃的主要内容,如果未能解决你的问题,请参考以下文章
python 使用pycurl的cURL Fitbit社区组,使用BeautifulSoup刮取页面,发送给Redis(写入获取数据以创建Fitbit仪表板