我正在尝试做什么并且它不起作用如下:使用内置的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];
答案 0 :(得分:6)
问题在于Facebook已经更改了某些政策,因此您无法将文字或图片作为默认设置。这就是为什么你没有看到文字和照片的原因。这里有2个场景,一个安装了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。
答案 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.");
}