我正在为我的iOS应用添加共享功能(我必须支持iOS 4.3)。在Facebook案例中,我想要实现的行为是:
如果iDevice上有facebook应用程序 然后打开它,然后分享已经预先填好的所有内容的视图
否则 在safari(或任何浏览器)中打开www.facebook.com/sharer.php?[etc]以共享我的页面。
我写了这个:
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"fb://publish/profile/me?text=%@", facebookShareLink]];
if([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
} else {
NSString *facebookLink = [NSString stringWithFormat:@"http://www.facebook.com/sharer.php?u=%@&t=%@", facebookShareLink, titleToShare];
facebookLink = [facebookLink stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:facebookLink]];
}
当没有安装Facebook应用程序时,它的效果非常好,但是当它安装好后会打开,但它不会进入共享视图。
我在某处读到了不再支持URL方案(我没有源代码)。这是真的吗?
那么在没有集成Facebook iOS SDK的情况下还有办法吗?我不想添加这个SDK,我只需要共享功能而不是所有的Graph内容。
编辑: 我不希望我的应用程序在社交媒体上分享自己,而是提示用户并让他自己轻松地做到这一点。我认为我不应该使用Facebook应用程序或Twitter应用程序进行身份验证,以便这样做,我应该吗?用户将在应用程序或移动网站上对自己进行身份验证。
答案 0 :(得分:3)
我终于使用iOS内置的Facebook共享对话框(SLComposeViewController)制作了一个解决方案,如果用户没有使用iOS 6,该对话框会回到网站上
NSString *facebookShareLink = @"some link to share";
NSString *titleToShare = @"some title";
// if we're not on iOS 6, SLComposeViewController won't be available. Then fallback on website.
Class composeViewControllerClass = [SLComposeViewController class];
if(composeViewControllerClass == nil || ![composeViewControllerClass isAvailableForServiceType:SLServiceTypeFacebook]) {
NSString *facebookLink = [NSString stringWithFormat:@"http://www.facebook.com/sharer.php?u=%@&t=%@", facebookShareLink, titleToShare];
facebookLink = [facebookLink stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:facebookLink]];
} else {
SLComposeViewController *composeViewController = [composeViewControllerClass composeViewControllerForServiceType:SLServiceTypeFacebook];
[composeViewController setInitialText:titleToShare];
[composeViewController addURL:[NSURL URLWithString:facebookShareLink]];
[parentController presentModalViewController:composeViewController animated:YES];
}
答案 1 :(得分:1)
您可以使用第三方组件,例如ShareKit http://getsharekit.com/
答案 2 :(得分:1)
您可以使用uiactivity在脸书,推特或电子邮件中分享
UIImage *image1 = shareimgview.image;
NSString *str1=[@"Brand: " stringByAppendingString:brand_field.text];
NSString *str2=[@"Product: " stringByAppendingString:product_field.text];
NSString *str3=[@"Model: "stringByAppendingString:model_field.text];
NSString *str4=[@"Comment: "stringByAppendingString:status_field.text];
NSArray* dataToShare = @[str1,myurl,str2,str3,str4, image1];
UIActivityViewController *actviewcon = [[UIActivityViewController alloc] initWithActivityItems:dataToShare applicationActivities:nil];
[self presentViewController:actviewcon animated:YES completion:NULL];
答案 3 :(得分:1)
对于那些寻找Swift 3解决方案的人来说,这是:
if let composeVC = SLComposeViewController(forServiceType:serviceType) {
composeVC.add(object.image())
composeVC.add(object.url())
composeVC.setInitialText(object.text())
presentingVC.present(composeVC, animated: true, completion: nil)
}