私は自分のアプリで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の空白のページにリダイレクトするだけで、私のアプリにリダイレクトされません。は私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ことによってそれを置き換えるを解決した
によってその答えは 'のNSLog(「FACEBOOKログインエラー%@」、エラー@)エラーを印刷canyou;' –
はリダイレクト、その場合にはドロップ決して私のユニークなオプションは、結果をキャンセルするOKボタンを押すことです。 @ Anbu.Karthik – origds
このコードをご覧くださいhttps://drive.google.com/file/d/0B7lSqbQq-WuYU9qNlhOdWczU2M/view?usp=sharingコードと同じです。 –