2016-12-05 5 views
0

iOSアプリケーションで適合通信許可を実装しようとしています。具体的には、私はget authorization from Fitbit using Oauth in iOSの手順に従おうとしています。現在、私はポイント1に従っており、私のアプリはfitbitアカウントにログインするためにSafariにリダイレクトしてから、すぐにクラッシュする私のアプリに移行します。iOSアプリケーションは、fitbit認証の際にurl /によって開かれたときにクラッシュします。

私は自分のアプリケーションの名前にURLスキームを設定していて、コールバックURL /リダイレクトURIは両方ともmyAppName://に設定されています。また、私のAppDelegateでは、決して呼び出されない関数アプリケーション(_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]; 
} 

これがあなたに役立つことを願っています。

関連する問題