2017-10-11 7 views
0

私は自分のアプリでFacebookログインを実装しています。iOS 10とiOS 11で私のアプリにリダイレクトするのではなく、Safariの空白ページを開くように許可してからFacebookのログイン

Facebookがアクセス権を取得した後、私のアプリへのリダイレクトを除いてすべてが動作しています。

Safariの空白のページは、自分のアプリケーションにリダイレクトする代わりに開かれたハンドルです。 I大豆多くのフォーラムとiOS 9で同様の問題の他のスタックオーバーフローの質問に、それはAppDelegateでこのコードを使用して固定されている読み:私はすでに私はFacebookの許可を与えるとき、このコードが正しく動作していることを確認し

- (BOOL)application:(UIApplication *)application 
     openURL:(NSURL *)url 
     options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> 
*)options { 

    return [[FBSDKApplicationDelegate sharedInstance] 
               application:application 
                openURL:url 
             sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] 
              annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]; 
    } 

    return YES; 
} 

が、まだ私が持っている唯一のオプションは、プレスユーザーキャンセル要求場合

にloginManager方法で私を送ってOKまたは 完了ボタンで新しいSafariの空白のページにリダイレクトするだけで、私のアプリにリダイレクトされません。

(1) Allow Facebook to read permissions

(2) Redirect to a Safari blank page

は私FBLoginMangerコードあり

self.manager =[[FBSDKLoginManager alloc] init]; 
    NSArray *facebookPermissions = @[@"email", @"public_profile", @"user_friends"]; 

    if ([FBSDKAccessToken currentAccessToken] != nil) { 
    [self.manager logOut]; 
    //return 
    } 

    [self.manager logInWithReadPermissions: facebookPermissions fromViewController: self handler: ^(FBSDKLoginManagerLoginResult* result, NSError* error) { 
     if (error != nil) { 
     //According to Facebook: 
     //Errors will rarely occur in the typical login flow because the login dialog 
     //presented by Facebook via single sign on will guide the users to resolve any errors. 

     NSLog(@"FACEBOOK LOGIN ERROR %@", error); 
     // Process error 
     [self.manager logOut]; 
     } else if (result.isCancelled) { 
     // Handle cancellations 
     [self.manager logOut]; 
     } else { 
     // If you ask for multiple permissions at once, you 
     // should check if specific permissions missing 
     BOOL allPermsGranted = true; 

     NSArray *grantedPermissions = [[result grantedPermissions] allObjects]; 

     NSString *lastObject = [grantedPermissions lastObject]; 

     for (NSString *permission in facebookPermissions) { 
      for (NSString* grantedPerm in grantedPermissions) { 
      NSRange range = [permission rangeOfString:grantedPerm]; 
      if ((range.length == 0) && (grantedPerm == lastObject)) { 
       allPermsGranted = false; 
      } else { 
       break; 
      } 
      } 
     } 
     if (allPermsGranted) { 
      // Do work 
      //NSString * fbToken = [[result token] tokenString]; 
      NSString * fbUserID = [[result token] userID]; 

      FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] 
             initWithGraphPath:@"/me" 
             parameters:@{@"fields": @"id,name,email"} 
             HTTPMethod:@"GET"]; 

      [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { 
      if (error == nil) { 
       NSDictionary *dict = @{ 
            @"email" : [result objectForKey:@"email"] , 
            @"providerID" : fbUserID, 
            @"username" : [result objectForKey:@"name"], 
            @"provider" : @"facebook" 
            }; 
       NSLog(@"DICT %@", dict); 
       [self.delegate loginWithCredentials:dict]; 
       [self logUserLoggedInWithFacebookEvent]; 
      } else { 
       NSLog(@"ERROR FACEBOOK %@", error); 
      } 
      }]; 

     } else { 
      //The user did not grant all permissions requested 
      //Discover which permissions are granted 
      //and if you can live without the declined ones 
      NSLog(@"FACEBOOK LOGIN ERROR"); 
      [self.manager logOut]; 
     } 
     } 
    }]; 

メソッドが呼び出されますが、常に、私はエラーFBLoginButtonを削除し、UIButtonことによってそれを置き換えるを解決した

+0

によってその答えは 'のNSLog(「FACEBOOKログインエラー%@」、エラー@)エラーを印刷canyou;' –

+0

はリダイレクト、その場合にはドロップ決して私のユニークなオプションは、結果をキャンセルするOKボタンを押すことです。 @ Anbu.Karthik – origds

+0

このコードをご覧くださいhttps://drive.google.com/file/d/0B7lSqbQq-WuYU9qNlhOdWczU2M/view?usp=sharingコードと同じです。 –

答えて

関連する問題