SLComposeViewController在iOS9中如何同时发布图片和链接

13

我试图做的事情,但它不起作用的是:使用内置的Facebook分享器发布我选择的图片和一个URL到Facebook,问题是两者无法同时上传,要么是图片+文本,效果很好,要么是URL+文本,效果也好,但当我将它们组合在一起时,文本+图片+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];

没有iOS9的问题。是Facebook最新API(4.7.x)的问题。 - Lokesh Dudhat
5个回答

6
问题在于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。

2

目前似乎没有解决方案,我们需要找到一个解决办法,也许先将所有内容上传到一个图片链接中,然后使用fb sdk指向该链接上的图片+链接作为离线图片,但不幸的是这种方法并不起作用。


1
很不幸,这个问题即使在iOS 10上也依然存在。一个简单的解决方法是直接删除URL,例如:
SLComposeViewController *fbSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[fbSheet setInitialText:@"I need your vote"];
[fbSheet addImage:tableViewScreenshot]; 

你甚至不能添加initialText。它不会出现。 - Ans

0

如果你只关心在分享内容时显示文本和图片,以下是一种可能的解决方案,虽然不是针对 OP 的直接回答:

如果你想要在 SlComposeView 中显示的图像和文本与你要分享的网站中已有的信息相同,则在 iOS 端不需要做任何特殊处理。

如果你是创建正在分享 URL 的网页的人,那么如果该页面有适当的 Open Graph META 标签,SLComposeView 类型的 Facebook 将自动在应用程序内显示在网页上设置的图像和文本。

有关 Facebook Open Graph Markup 的更多信息,请参见https://developers.facebook.com/docs/sharing/webmasters/#markup


-1

我在我的iOS应用程序中成功实现了Facebook分享,当时FB未安装。后来我安装了FB以使用最新的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.");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接