2016-12-05 85 views
0

我试图在我的iOS应用程序中实现fitbit授权。具体而言,我试图按照get authorization from Fitbit using Oauth in iOS中的步骤操作。目前,我已遵循第1点,我的应用重定向到safari以登录到fitbit帐户,然后转换回我的应用,该应用立即崩溃。iOS应用程序在由url /在fitbit授权期间打开时崩溃

我已经设置了一个URL方案作为我的应用程序的名称,并且我的回调URL /重定向URI都设置为myAppName://。我也在我的AppDelegate中实现了一个func应用程序(_app:UIApplication,open url:URL,options:[UIApplicationOpenURLOptionsKey:Any] = [:]) - > Bool {},它永远不会被调用。

有什么想法可能导致这种情况?

更一般地说:为什么一个应用程序在被url打开时会崩溃。

回答

0

当您在用户输入其凭据时调用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]; 
} 

我希望这会帮助你。