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

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

作者: 流火绯瞳 | 来源:发表于2024-11-07 17:26 被阅读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。

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/ispxjjtx.html