2016-12-05 25 views
0

iOS 앱에서 적합성 인증을 구현하려고합니다. 특히 get authorization from Fitbit using Oauth in iOS의 단계를 따르려고합니다. 현재, 포인트 1을 따라 갔고 내 앱이 사파리로 리디렉션되어 fitbit 계정에 로그인 한 다음 즉시 내 앱으로 전환합니다. 앱이 즉시 중단됩니다.fitbit 인증 도중 url /을 통해 iOS 앱을 열면 오류가 발생합니다.

내 앱의 이름으로 URL 스키마를 설정했으며 콜백 URL/리디렉션 URI는 모두 myAppName : //으로 설정되었습니다. 또한 결코 호출되지 않는 내 AppDelegate에서 func 응용 프로그램 (_ app : UIApplication, open url : URL, options : [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {} 메서드를 구현했습니다.

이 문제의 원인에 대한 의견이 있으십니까?

더 일반적으로 : URL로 열면 앱이 충돌하는 이유는 무엇입니까?

답변

0

사용자가 자신의 자격 정보를 입력하면 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]; 
} 

이 정보가 도움이되기를 바랍니다.