程序内分享 之二

在上篇博客程序内分享到微信(其实适用于所有支持Share Extension的分享,不仅仅是微信)中说过,利用SLComposeViewController + App Share Extension特性能实现程序内分享。并且给大家介绍过程序内实现分享的两种方式:程序内部分享方式一程序内部分享方式二。这篇博客主要分享在实际使用程序内部分享方式一中遇到的一些问题。供大家,在选择使用哪种分享方式做参考。如果你正在犹豫是否要用程序内分享取代传统SDK分享 或者犹豫使用程序内部分享方式一还是程序内部分享方式二,那请你看完下面内容,再细细权衡。

下面通过实践过程来详细分析程序内部分享方式一优缺点

“程序内部分享方式一”的优缺点

如果还不清楚程序内部分享方式一指的是什么,请看程序内分享到微信
内部分享方式一优点

1,不需要集成SDK(想想不需要申请/注册Key,不需要为每个平台添加scheme支持,这是多么幸福的事啊)。
2,程序内部搞定,体验非常好(不用担心跳转到微信,用户不返回app)。
3,各种平台分享,代码高度一致,通用性非常强。
4,由于是app 内部分享,分享成功失败,统计非常准确。(不用担心跳转到微信用户不返回app了或者分享完后“玩了一会”才返回app造成我们的app不知道用户是否真的分享)

内部分享方式一缺点

1,对“图文链接”支持不是很好(后面有详细案例分析)。如果单纯分享图片或者文字这种方式是首先。
2,没有网络的情况不能分享成功。(SDK集成即使没有网络也能分享成功)
3,不能指定分享到某个特定平台。你休想限制用户分享到“微信朋友圈”
而不是“微信好友”。因为你只能在SLComposeViewController 唤起微信分享的界面才能选择"发送给好友"/"分享到朋友圈",但是用户具体是"发送给好友"/"分享到朋友圈",我们app无法知道。所以我们无法根据具体是"发送给好友"/"分享到朋友圈"来定制不同内容。(SDK集成可以个性化定制,分享“朋友圈”和“微信好友”内容)。

下面详细分析内部分享方式一,分享“图文链接”遇到的问题。
同样下面一段代码,分享到微信和QQ表现效果不一样。

   //微信Share Extension bundle id
    NSString *test = @"com.tencent.xin.sharetimeline";
   //QQ Share Extension bundle id
   //NSString *test = @"com.tencent.mqq.ShareExtension";
   //分享到sina微博
   //NSString *test = SLServiceTypeSinaWeibo;
    if (![SLComposeViewController isAvailableForServiceType:test]) {
        NSLog(@"或者没有配置相关的帐号");
        return;
    }
    
    // 2.创建分享的控制器
    SLComposeViewController *composeVc = [SLComposeViewController composeViewControllerForServiceType:test];
    if(composeVc == nil){
        return
    }
    // 2.1.添加分享的文字
    [composeVc setInitialText:@"balabalabala..."];
    
    // 2.2.添加一个图片
    [composeVc addImage:[UIImage imageNamed:@"icon_session-8"]];
  
    // 2.3.添加一个链接
    [composeVc addURL:[NSURL URLWithString:@"http://www.jianshu.com/p/8a8c74684a26"]];
  
    // 3.弹出分享控制器(以Modal形式弹出)
    [self presentViewController:composeVc animated:YES completion:nil];
    
    
    // 4.监听用户点击了取消还是发送
    /*
     SLComposeViewControllerResultCancelled,
     SLComposeViewControllerResultDone
     */
    composeVc.completionHandler = ^(SLComposeViewControllerResult result){
        if (result == SLComposeViewControllerResultCancelled) {
            NSLog(@"点击了取消");
        } else {
            NSLog(@"点击了发送");
        }
    };

下面分享一个图文链接到微信,看看会是什么效果。代码如上:
没有网络的情况(如飞行模式下分享):
下图说明,虽然我设置了icon_session-8

[composeVc addImage:[UIImage imageNamed:@"icon_session-8"]];

但是没起一点作用。在分享链接的时候,图片被忽略,标题为“无标题“。

weichat.png

icon_session-8 图如下:


icon_session-8.png

没有网络分享到“微信好友”分享时提示

weichat_tip.png

有网络的情况下分享到微信:
有网的情况默认先显示图"weichat.png",然后网络刷新后变成图"weichat_net.png",titile取自链接的标题,分享的图片取自链接里面的第一张图

weichat_net.png

上面代码稍作如下改动,启用QQ分享

   //微信Share Extension bundle id
   //NSString *test = @"com.tencent.xin.sharetimeline";
   //QQ Share Extension bundle id
   NSString *test = @"com.tencent.mqq.ShareExtension";

下面来看看利用程序内部分享方式一将“图文链接”分享到QQ的表现:
没有网络的情况(如飞行模式下):
从下面效果图上能看出,我们我们设置的默认图,是默认的分享链接。标题默认是"分享链接"

qq.png

没有网络时分享到“我的好友”提示

qq_tip.png

有网络的情况:
图片取自我博客的默认头像,标题取自博客标题,描述取自博客第一句话

qq_net.png

对比一下QQ 和 微信 分享”图文链接“的行为。实现机制各不相同。所以对于”图文链接“的分享,不建议采用内部分享方式一这种机制。而且如果你分享的链接有redirect行为,QQ和微信表现也不一样。所以程序内部分享方式一对“图文链接”支持的不是很好。

程序内部分享方式二的优缺点

程序内部分享方式二优点:

1,不需要集成SDK(想想不需要申请/注册Key,不需要为每个平台添加scheme支持,这是多么幸福的事啊)。
2,程序内部搞定,体验非常好(不用担心,跳转到微信等,用户不返回app)。
3,各种平台分享,代码高度一致,通用性非常强。
4,系统支持的比较好。系统实现的程序内分享基本都是这种方式调用。所以第三方厂商对这种方式支持比较好。

程序内部分享方式二缺点:

1,界面定制非常差(如果第一次分享到某个非系统默认支持的平台,第一次还需要自己选中)。
2,没有网络的情况不能分享成功。(SDK集成即使没有网络也能分享成功)
3,不能指定分享到某个特定平台。你休想限制用户分享到“微信朋友圈”
而不是“微信好友”。因为你只能在SLComposeViewController 唤起微信分享的界面才能选择"发送给好友"/"分享到朋友圈",但是用户具体是"发送给好友"/"分享到朋友圈",我们app无法知道。所以我们无法根据具体是"发送给好友"/"分享到朋友圈"来定制不同内容。(SDK集成可以个性化定制,分享“朋友圈”和“微信好友”内容)。

程序内部分享方式一程序内部分享方式二对比

总的来说程序内部分享方式一程序内部分享方式二在某些方面各有千秋。

"程序内部分享方式一"相对于“程序内部分享方式二”的优点:

1,界面比较好定制
2,能精确统计分享成功失败。

“程序内部风向方式二”相对于“内部分享方式一”的优点:

1,对图文链接支持的比较好。

后面有时间在说一说利用“程序跳转实现分享”的两种方式。一种是依赖于SDK的,如友盟;另一种是利用scheme 实现跳转,经典代表Openshare

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,924评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,902评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,716评论 0 239
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,783评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,166评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,510评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,784评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,476评论 0 196
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,196评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,459评论 2 243
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,978评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,321评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,964评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,046评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,803评论 0 193
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,530评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,420评论 2 265

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,561评论 25 707
  • 社交红利阅读笔记 书名:社交红利(修订升级版) 作者:徐志斌 出版社:中信出版社 正文前笔记: 推荐序1摘要 社交...
    凫水阅读 8,803评论 4 26
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,609评论 4 59
  • 夜里 我睡过去 但我将在梦中醒来 作为你,作为他,作为我自己 白天 我醒着 却像是睡着了般 没头没绪,不明所以
    旒苏阅读 209评论 0 3
  • 从我遇到你的那一刻起,我的生命中便永远有了你的气息。 喜欢看着你蜷缩在沙发上,默然 无语 浅笑的摆弄手机时的样子。...
    数人阅读 443评论 0 0