SLComposeViewController发布了image和url ios9

时间:2015-10-17 21:17:34

标签: ios facebook uiimage share slcomposeviewcontroller

我正在尝试做什么并且它不起作用如下:使用内置的facebook分享器发布我的选择的图像和Facebook的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];

5 个答案:

答案 0 :(得分:6)

问题在于Facebook已经更改了某些政策,因此您无法将文字或图片作为默认设置。这就是为什么你没有看到文字和照片的原因。这里有2个场景,一个安装了Facebook应用,另一个没有安装Facebook应用。下面是Facebook应用程序已经安装在设备上。 enter image description here

这就是设备上没有安装Facebook应用程序

enter image description here

这是我的代码:

 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。

答案 1 :(得分:2)

所以现在似乎没有解决方案,我们应该为它找到一个解决方法,可能先将所有内容上传到网址,然后使用fb sdk指向该网址中的图片+链接不幸的是,离线图片似乎无法正常工作。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

这不是OP的直接答案,但是如果你只关心在分享内容时显示文字和图像,这里有一个可能的解决方案:

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

如果您是同时创建了您正在共享网址的网页的人,如果您在页面上有正确的Open Graph META标记,则Facebook类型的 SLComposeView 将显示图片和文字这是在您的应用程序中自动设置的网页。

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

答案 4 :(得分:-1)

如果fb没有安装,我的ios应用程序中的facebook共享工作正常。我已经安装了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.");
}