2016-12-05 64 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]; 
} 

我希望這會幫助你。

相關問題