ios 非对话 Facebook 分享失败,没有错误,也没有反馈

Posted

技术标签:

【中文标题】ios 非对话 Facebook 分享失败,没有错误,也没有反馈【英文标题】:ios non-Dialog Facebook share fails with no errors and no feedback 【发布时间】:2015-10-16 16:38:57 【问题描述】:

我已经在我的 ios 应用程序中进行了一年的 facebook 分享,并且已经升级(也就是完全重写)以使用最新的 api (4.7.x),现在分享根本不起作用。我检查我是否具有 publish_actions 权限(在调用此方法之前我已在打开的图形设置、操作类型、功能中进行了“明确共享”检查。我正在验证内容(我没有收到错误)并且有委托,它的任何方法都不会被调用。

-(void)shareWithFacebook:(NSString *)message

    if ([[FBSDKAccessToken currentAccessToken] hasGranted:@"publish_actions"])
    
        NIDINFO(@"Facebook sharing has publish_actions permission");
    
    else
    
        FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];
        [loginManager logInWithPublishPermissions:@[@"publish_actions"]
            handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)
            
                NIDERROR(@"Facebook sharing getting publish_actions permission failed: %@", error);
            
        ];   
    

    NSMutableDictionary *properties = [NSMutableDictionary dictionaryWithDictionary: @
                                                                                   @"og:type": @"article",
                                                                                   @"og:title": @"Bloc",
                                                                                   @"og:description": message,
                                                                                   @"og:url": @"http://getonbloc.com/download"
                                                                                       ];




    FBSDKShareOpenGraphObject *object = [FBSDKShareOpenGraphObject objectWithProperties:properties];

        // Create the action
    FBSDKShareOpenGraphAction *action = [FBSDKShareOpenGraphAction actionWithType:@"mynamespace:Share" object:object key:@"article"];
    [action setString:@"true" forKey:@"fb:explicitly_shared"];

        // Create the content
    FBSDKShareOpenGraphContent *content = [[FBSDKShareOpenGraphContent alloc] init];
    content.action = action;
    content.previewPropertyName = @"article";

            // Share the content
    FBSDKShareAPI *shareAPI = [[FBSDKShareAPI alloc] init];
    shareAPI.shareContent = content;
    shareAPI.delegate = self;

    NSError *error;
    if([shareAPI validateWithError:&error] == NO)
    
        NIDERROR(@"Facebook sharing content failed: %@", error);
    

    [shareAPI share];


 #pragma mark - FBSDKSharingDelegate

- (void) sharer:(id<FBSDKSharing>)sharer didCompleteWithResults:(NSDictionary *)results

    NIDINFO(@"Facebook sharing completed: %@", results);


- (void) sharer:(id<FBSDKSharing>)sharer didFailWithError:(NSError *)error

    NIDERROR(@"Facebook sharing failed: %@", error);


- (void) sharerDidCancel:(id<FBSDKSharing>)sharer

    NIDINFO(@"Facebook sharing cancelled.");

我有登录工作,可以很好地获取照片。我根本没有从 facebook api 得到任何反馈,也没有发布任何内容。我在这里做了什么特别愚蠢的事情吗?

【问题讨论】:

这听起来像是一个错误,你能在developers.facebook.com/bugs 报告这个问题并附上一个小示例项目吗? 【参考方案1】:

只是一种可能性,但我发现 Facebook 集成变得不方便,因为我发现每次通过 hasGranted: 检查当前令牌是否已授予权限时,即使我在几分钟前获得了权限,它几乎总是失败,或者来自之前的应用启动。

似乎在您的代码中,如果没有授予权限,您尝试登录并再次获得权限。但是当该块返回时,无论是否授予实际权限,都会引发错误。相反,如果成功,您应该继续分享。

【讨论】:

感谢您指出该缺陷 - 我在此方法中添加了权限检查,以确保我已被授予它,您是对的,一旦我发现我的问题需要重新构建它是。我确实有权限,所以块没有被执行,[shareAPI share] 确实被执行了,它似乎什么都不做

以上是关于ios 非对话 Facebook 分享失败,没有错误,也没有反馈的主要内容,如果未能解决你的问题,请参考以下文章

Facebook分享对话框立即消失

Facebook 分享对话框在哪个 iOS 中工作?

Facebook iOS SDK 分享对话框 - 在朋友的墙上分享

Facebook 邀请分享对话框未打开 iOS Swift

iOS Facebook 分享对话框第一次无法正常工作

iOS Facebook 原生分享对话框:初始文本