Using Facebook-iOS-SDK (4.0.1) result.isCancelled 设置为使用浏览器时
Using Facebook-iOS-SDK (4.0.1) result.isCancelled is set when using a browser
我正在使用 Facebook-iOS-SDK (4.0.1) 通过自定义按钮登录。我正在执行以下代码
- (IBAction)fbButtonClicked:(UIButton *)sender {
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
if (error) {
// Process error
} else if (result.isCancelled) {
// Handle cancellations
} else {
// If you ask for multiple permissions at once, you
// should check if specific permissions missing
if ([result.grantedPermissions containsObject:@"email"]) {
// Do work
if ([FBSDKAccessToken currentAccessToken]) {
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me/friends" parameters:nil]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result2, NSError *error) {
if (!error) {
NSLog(@"fetched user:%@", result2);
}
}];
}
}
}
}];
}
如果我在设备上安装了 Facebook 应用程序,那么代码可以正常工作。当我没有安装 facebook 应用程序时,将在浏览器中打开 facebook。在这里,'result.isCancelled' 设置为 'YES',我没有得到所需的结果。
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:sourceApplication
annotation:annotation];
}
在 appDelegate.m 中需要
对我来说原因不同
以下行导致 result.isCancelled 始终为真...我知道为什么
[login logInWithReadPermissions:@[@"public_profile", @"email", @"gender"]
改成这个之后……成功了
[login logInWithReadPermissions:@[@"public_profile"]
⚫ SceneDelegate.swift
需要这个函数
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
guard let url = URLContexts.first?.url else {
return
}
let _ = ApplicationDelegate.shared.application(
UIApplication.shared,
open: url,
sourceApplication: nil,
annotation: [UIApplication.OpenURLOptionsKey.annotation])
}
我正在使用 Facebook-iOS-SDK (4.0.1) 通过自定义按钮登录。我正在执行以下代码
- (IBAction)fbButtonClicked:(UIButton *)sender {
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
if (error) {
// Process error
} else if (result.isCancelled) {
// Handle cancellations
} else {
// If you ask for multiple permissions at once, you
// should check if specific permissions missing
if ([result.grantedPermissions containsObject:@"email"]) {
// Do work
if ([FBSDKAccessToken currentAccessToken]) {
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me/friends" parameters:nil]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result2, NSError *error) {
if (!error) {
NSLog(@"fetched user:%@", result2);
}
}];
}
}
}
}];
}
如果我在设备上安装了 Facebook 应用程序,那么代码可以正常工作。当我没有安装 facebook 应用程序时,将在浏览器中打开 facebook。在这里,'result.isCancelled' 设置为 'YES',我没有得到所需的结果。
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:sourceApplication
annotation:annotation];
}
在 appDelegate.m 中需要
对我来说原因不同
以下行导致 result.isCancelled 始终为真...我知道为什么
[login logInWithReadPermissions:@[@"public_profile", @"email", @"gender"]
改成这个之后……成功了
[login logInWithReadPermissions:@[@"public_profile"]
⚫ SceneDelegate.swift
需要这个函数 func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
guard let url = URLContexts.first?.url else {
return
}
let _ = ApplicationDelegate.shared.application(
UIApplication.shared,
open: url,
sourceApplication: nil,
annotation: [UIApplication.OpenURLOptionsKey.annotation])
}