2016-12-05 2 views
0

Я пытаюсь реализовать авторизацию fitbit в моем приложении iOS. В частности, я пытаюсь выполнить шаги в get authorization from Fitbit using Oauth in iOS. В настоящее время я слежу за пунктом 1, и мое приложение перенаправляет на сафари, чтобы войти в учетную запись фитинга, а затем переходит обратно в мое приложение, которое сразу же сбой.Сбой приложения iOS при открытии с помощью url/во время авторизации фитата

Я установил URL-схему как имя моего приложения, а мой URL-адрес обратного вызова/перенаправления URI установлены в myAppName: //. Я также внедрил приложение func (_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey: Any] = [:]) -> Bool {} в моем AppDelegate, который никогда не вызывается.

Любые мысли о том, что может быть причиной этого?

В целом: почему приложение будет сбой при открытии URL-адреса.

ответ

0

Когда вы вызываете Fitbit-аутентификацию, как только пользователь вводит свой учетный атрибут, ваш вызов вызовет ваш обратный вызов. поэтому вам необходимо обработать этот вызов в своем делете приложения так.

- (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]; 
} 

Я надеюсь, что это вам поможет.

Смежные вопросы