gpt4 book ai didi

ios - FBSDKLoginManager 不处理 logInWithPublishPermissions : correctly

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:15:35 25 4
gpt4 key购买 nike

我正在实现适用于 iOS 的 SDK v4.1,当我尝试调用 publishPermissions: 时,我没有收到任何回调。

出于某种原因,当我运行 logInWithReadPermissions: 时一切正常,但是当我运行 logInWithPublishPermissions: 时,它永远不会访问我的响应处理程序。什么都没发生。

为了进行测试,我在运行 logInWithPublishPermissions: 之前重置了我的 loginManager,令我惊讶的是它随后起作用了(又名 NSLog(@"RESULT") 被调用)。

我是否遗漏了有关 loginManager 工作原理的信息?我不应该在不重置的情况下使用它吗?

// FacebookController.m

@implementation FacebookController

FBSDKLoginManager *loginManager;
static FacebookController *_shared = nil;

- (id)init {
self = [super init];
if (self != nil) {
userData = [[NSMutableDictionary alloc] init];

loginManager = [[FBSDKLoginManager alloc] init];
}
return self;
}

+ (id)getInstance {
if (!_shared) {
_shared = [[self alloc] init];
}
return _shared;
}

- (bool)hasPublishPermissions {
FBSDKAccessToken *accessToken = [FBSDKAccessToken currentAccessToken];

if(accessToken != NULL){
NSSet *permissions = [accessToken permissions];
if([permissions containsObject:@"publish_actions"]){
return TRUE;
}
}
return FALSE;
}

- (void)requestPublishPermissionsWithDelegate:(id)aDelegate {
if(![self hasPublishPermissions]){
// FOR SOME REASON IT WORKS IF I RESET LOGIN MANAGER AS FOLLOWS
// loginManager = [[FBSDKLoginManager alloc] init];

[loginManager logInWithPublishPermissions:@[@"publish_actions"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
NSLog(@"RESULT: %@", result);
}];
}
}

- (void)connectToFacebookWithDelegate:(id)aDelegate {
FBSDKAccessToken *accessToken = [FBSDKAccessToken currentAccessToken];

if(accessToken != nil){
[aDelegate performSelector:@selector(facebookSignedIn)];
} else {
[loginManager logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
if (error) {
// Process error
NSLog(@"ERROR");
} else if (result.isCancelled) {
// Handle cancellations
NSLog(@"CANCELLED");
} else {
NSLog(@"SUCCESS");
[aDelegate performSelector:@selector(facebookSignedIn)];
}
}];
}
}
@end

编辑 #1:包括它在给定场景下工作和不工作的视频:

不工作(loginManager 重新初始化被注释掉): https://dl.dropboxusercontent.com/u/14277258/not-working.mov

工作(登录管理器重新初始化): https://dl.dropboxusercontent.com/u/14277258/working.mov

最佳答案

您的视频堆栈跟踪表明您正在为初始登录调用处理程序中的发布权限请求。应该避免这种情况:

  1. 在用户已经授予您一些权限后,您导致了另一次登录 - 用户在完成一个登录对话框后必须立即看到另一个登录对话框并不是很好。
  2. 您在不需要的时候请求发布权限 - 这可能违反 Facebook 开发者政策,而且也不是最佳用户体验。相反,您应该仅在需要时(即共享时)请求发布。

如果您真的坚持,您可以异步发送您的第二个登录调用,以便第一个请求完全完成,但我不推荐这样做。我们或许可以更新 SDK 来检测这一点并记录下来,这样就不会那么困惑了。

关于ios - FBSDKLoginManager 不处理 logInWithPublishPermissions : correctly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30083035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com