SLComposeViewController post 图像和 url ios9

SLComposeViewController post both image and url ios9

我正在尝试做但它不起作用的是以下内容:post 我选择的图像以及 url 使用内置的 facebook 共享器发送到 facebook,问题是它不能上传两者,它要么是图片 + 文本并且效果很好,要么是 url + 文本并且效果很好,但是当我将它们组合在一起时 text+picture+url 它从url 而不是我上传的照片。有什么建议么?我在 iOS9

上这样做
    UIImage *tableViewScreenshot = [tblFeed screenshotOfCellAtIndexPath:idx];

    SLComposeViewController *fbSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
    [fbSheet setInitialText:@"I need your vote"];
    [fbSheet addURL:[NSURL URLWithString:str]];
    [fbSheet addImage:tableViewScreenshot];

当 fb 未安装时,我的 ios 应用程序中的 facebook 共享工作正常。我已经安装了 fb 以使用最新的 api (4.7.x),现在共享根本不起作用。我检查我是否有 publish_actions 权限(我在调用此方法之前执行此操作,我已 'expicitly shared' 检查打开的图形设置、操作类型、功能。我正在验证内容(我没有得到错误)并有一个委托,它的 none 个方法被调用。

-(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 更改了一些政策,因此您不能默认显示文本或图像。这就是您看不到文字和照片的原因。这里有两种情况,一种是安装了 Facebook 应用程序,另一种是没有安装 Facebook 应用程序。下面是设备上已安装 Facebook 应用程序时的情况。

这是设备上未安装 Facebook 应用程序时的情况

这是我的代码:

 SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];

[controller addURL:[NSURL URLWithString:@"https://www.google.com"]];
[controller addImage:[UIImage imageNamed:@"icon_circle"]];
[controller setInitialText:@"Bhavuk you're great!"];

[self presentViewController:controller animated:YES completion:nil];

所以如果你想分享一切,最好使用 FB SDK。

所以目前似乎没有解决方案,我们应该找到解决方法,也许先将所有图片上传到 url,然后使用 fb sdk 指向来自不幸的是,url + link 作为离线图片似乎不起作用。

不幸的是,即使在 iOS 10 上问题仍然存在。一个简单的解决方法是删除 URL,例如:

SLComposeViewController *fbSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[fbSheet setInitialText:@"I need your vote"];
[fbSheet addImage:tableViewScreenshot]; 

这不是对 OP 的直接回答,但如果您只关心在共享内容时显示文本和图像,这是一个可能的解决方案:

如果您要在 SlComposeView 中显示的图像和文本与您要共享的网站中存在的信息相同;您根本不需要在 iOS 方面做任何特别的事情。

如果您还创建了您共享 URL 的网页,如果您在该页面上有适当的 Open Graph META 标签,SLComposeView 类型的 Facebook 将自动显示在您的应用程序中的网页上设置的图像和文本。

有关 Facebook Open Graph Markup 的一些信息;见 https://developers.facebook.com/docs/sharing/webmasters/#markup