Facebook和Twitter的开发者账号的申请相对比较麻烦,项目有简单的分享需求,即:把一个网页分享到对应平台,查询了一些资料最终实现了相关需求。
这里的实现逻辑,不需要申请开发者账号
有两种方式
方式一:已安装客户端
这里使用系统的 Social
框架,需要引入头文件
#import <Social/Social.h>
Facebook分享
SLComposeViewController *compos = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[compos setInitialText:descr];
[compos setTitle:title];
[compos addImage:image];
[compos addURL:[NSURL URLWithString:url]];
compos.completionHandler = ^(SLComposeViewControllerResult result) {
NSError *err = nil;
if (completion) {
completion(err);
}
};
// compos.modalPresentationStyle = 0;
[self presentViewController:compos animated:YES completion:^{
}];
twitter分享
SLComposeViewController *compos = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
[compos setInitialText:descr];
[compos setTitle:title];
[compos addImage:image];
[compos addURL:[NSURL URLWithString:url]];
compos.completionHandler = ^(SLComposeViewControllerResult result) {
NSError *err = nil;
if (completion) {
completion(err);
}
};
// compos.modalPresentationStyle = 0;
[self presentViewController:compos animated:YES completion:^{
}];
这种方式的分享,需要手机内安装对应的客户端,且登录账号;
如果未安装,点击会没反应;
未登录账号,点击会提示登录。
还有就是SLServiceTypeFacebook
、SLServiceTypeTwitter
iOS11后会有过期的警告,暂时还能使用;这里可以使用对应的ID代替,实现效果是一样的:
com.apple.share.Twitter.post
com.apple.share.Facebook.post
方式二:未安装客户端
这种是通过对应的URL进行分享,这种方式可以在未安装对应客户端的情况下,跳转到Safari浏览器完成分享:
twitter的分享
NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@""];
NSString *shareurl = [url stringByAddingPercentEncodingWithAllowedCharacters:set];
NSString *text = [title stringByAddingPercentEncodingWithAllowedCharacters:set];
NSString *share = [NSString stringWithFormat:@"https://twitter.com/intent/tweet?url=%@&text=%@",shareurl, text];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:share] options:@{} completionHandler:^(BOOL success) {
NSError *err = nil;
if (completion) {
completion(err);
}
}];
这里需要注意的是shareurl如果带有参数,一定要编码,否则会识别不了,text同理也需要编码;这种方式在安装Twitter客户端的情况下,会直接跳转到Twitter客户端进行分享,感觉比方式一要方便。
Facebook的分享
NSCharacterSet *C = [NSCharacterSet characterSetWithCharactersInString:@""];
NSString *shareurl = [url stringByAddingPercentEncodingWithAllowedCharacters:C];
NSString *share = [NSString stringWithFormat:@"http://www.facebook.com/sharer.php?u=%@",shareurl];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:share] options:@{} completionHandler:^(BOOL success) {
NSError *err = nil;
if (completion) {
completion(err);
}
}];
Facebook目前只查询到分享URL的方式,其他例如文本,不能分享,如果你知道如何设置参数,希望能告知。
以上两种方式,可以结合使用,通过以下方法判断是否安装对应的app:
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"twitter://"]]) {
// 已安装Twitter
}
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fb://"]]) {
// 已安装Facebook
}
需要在Infoplist
文件内添加scheme
白名单:twitter、fb。