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
我正在尝试做但它不起作用的是以下内容: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