【iOS】不需要开发者信息,分享网页到Facebook、Twit

2024-11-07  本文已影响0人  流火绯瞳

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:^{
            
        }];

这种方式的分享,需要手机内安装对应的客户端,且登录账号;
如果未安装,点击会没反应;
未登录账号,点击会提示登录。
还有就是SLServiceTypeFacebookSLServiceTypeTwitter 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。

上一篇 下一篇

猜你喜欢

热点阅读