在 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 应用程序时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

android/iOS 应用程序中的 Fitbit 数据

存储可穿戴数据的理想数据库选择 (Fitbit)

如何访问 oauth2 访问令牌和用户信息

python 使用pycurl的cURL Fitbit社区组,使用BeautifulSoup刮取页面,发送给Redis(写入获取数据以创建Fitbit仪表板

在不打开浏览器Python的情况下打开授权URL

在阿里云进行授权划分的步骤有