iOS Twitter SDK 集成分享功能

作者: Andi | 来源:发表于2018-03-23 10:23 被阅读494次
    • 随着中国互联网企业走向海外,越来越多的中国APP 支持Twitter 及Facebook ,但是 国内的集成平台对Twitter 及Facebook支持并不好,其实也不怪国内平台,一是被墙,二是国外的sdk都不太人性化,对开发者很不友好。
    • 在这之前一直用友盟分享 点击Twitter 直接返回个结果(分享成功或失败) 没有任何过程或像国内微博 微信的跳转客户端,这程序员都不能忍 何况老板。
    • 补充一下 苹果自带的 SLComposeViewController 在iOS11 已经废弃了。
    • Twitter 在之前要集成相关功能 要先集成Fabric 在里面下载Twitter SDK,我16年集成过一次,虽然成功了,但是反正感觉挺费劲。今年听说Fabric 卖给了谷歌。直接可以下载 Twitter SDK了 也支持CocoaPods,真是改进了不少。
    • Twitter SDK 只支持iOS9 以上 这点要注意!

    下面开始集成

    • 点击twitter iOS集成文档
    • 按照 twitter 给集成文档就可以,有些小伙伴被墙,我把过程整理一下 发出来

    1. 使用 CocoaPods 注意use_frameworks! 不能少

    我集成的版本是3.2.2


    image

    集成成功下一步

    2。AppDelegate 引用#import <TwitterKit/TwitterKit.h>

       //初始化Appkey 和Secret
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
         [[Twitter sharedInstance] startWithConsumerKey:twitterAppkey consumerSecret:twitterSecret];
    }
       
    //Twitter分享 必须实现
    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
        return [[Twitter sharedInstance] application:app openURL:url options:options];
    }
    

    3.Info.plist 文件添加以下字段

    // Info.plist
    <key>CFBundleURLTypes</key>
    <array>
      <dict>
        <key>CFBundleURLSchemes</key>
        <array>
          <string>twitterkit-<consumerKey></string>
        </array>
      </dict>
    </array>
    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>twitter</string>
        <string>twitterauth</string>
    </array>
    

    4.分享推文

    第一种方法 带text和图片的 正常推文显示方式

    //检查是否当前会话具有登录的用户
     if ([[Twitter sharedInstance].sessionStore hasLoggedInUsers]) {
         TWTRComposer *composer = [[TWTRComposer alloc] init];
         [composer setText:title];
        //带图片方法
         [composer setImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageUrl]]]];
         [composer setURL:[NSURL URLWithString:shareUrl]];
         [composer showFromViewController:self completion:^(TWTRComposerResult result){
             if(result == TWTRComposerResultCancelled) {
                //分享失败
            }else{
                //分享成功
             }
         }];
      }else{
        [[Twitter sharedInstance] logInWithCompletion:^(TWTRSession *session, NSError *error) {
            if (session) {
                     TWTRComposer *composer = [[TWTRComposer alloc] init];
                     [composer setText:title];
                    //带图片方法
                     [composer setImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageUrl]]]];
                     [composer setURL:[NSURL URLWithString:shareUrl]];
                     [composer showFromViewController:self completion:^(TWTRComposerResult result){
                          if(result == TWTRComposerResultCancelled) {
                             //分享失败
                         }else{
                         //分享成功
                         }
                     }];
                     NSLog(@"signed in as %@", [session userName]);
                } else {
                     NSLog(@"error: %@", [error localizedDescription]);
                }
            }];
        }
    
    
    image
    • 展示样式 :这种正常推文 只能点击在蓝色的连接才能 跳转网页,点击图片是图片浏览器
    image

    第二种方法 不带图片的 大卡片显示方式

    和上面方法是一样的 去掉图片添加的方法 。 text方法 有没有都可以

    • 大卡片方式 需要HTML 去改一下 大约是给title和图片加Twitter 固定的某个字段 Twitter就会自动截取了

    • 点击twitter 大卡片集成文档

    //检查是否当前会话具有登录的用户
     if ([[Twitter sharedInstance].sessionStore hasLoggedInUsers]) {
         TWTRComposer *composer = [[TWTRComposer alloc] init];
         [composer setText:title];
         //注释掉添加图片方法
         [composer setURL:[NSURL URLWithString:shareUrl]];
         [composer showFromViewController:self completion:^(TWTRComposerResult result){
             if(result == TWTRComposerResultCancelled) {
                //分享失败
            }else{
                //分享成功
             }
         }];
      }else{
        [[Twitter sharedInstance] logInWithCompletion:^(TWTRSession *session, NSError *error) {
            if (session) {
                     TWTRComposer *composer = [[TWTRComposer alloc] init];
                     [composer setText:title];
                     //注释掉添加图片方法
                     [composer setURL:[NSURL URLWithString:shareUrl]];
                     [composer showFromViewController:self completion:^(TWTRComposerResult result){
                          if(result == TWTRComposerResultCancelled) {
                             //分享失败
                         }else{
                         //分享成功
                         }
                     }];
                     NSLog(@"signed in as %@", [session userName]);
             } else {
                     NSLog(@"error: %@", [error localizedDescription]);
             }
          }];
    }
    
    
    image
    • 展示样式 这种大卡片的方式 点击大卡片就跳转网页了。没有图片浏览
    image

    5.如果是分享视频

    //检查是否当前会话具有登录的用户
    if ([[Twitter sharedInstance].sessionStore hasLoggedInUsers]) {
        TWTRComposerViewController *composer = [TWTRComposerViewController emptyComposer];
            //下面俩个方法按需使用
       // [composer initWithInitialText:@"" image:@"" videoURL:@""];
      // [composer initWithInitialText:@"" image:@"" videoData:@""];
        [self presentViewController:composer animated:YES completion:nil];
    } else {
        [[Twitter sharedInstance] logInWithCompletion:^(TWTRSession *session, NSError *error) {
            if (session) {
                TWTRComposerViewController *composer = [TWTRComposerViewController emptyComposer];
                [self presentViewController:composer animated:YES completion:nil];
            } else {
                //分享失败
            }
        }];
    }
    

    再次强调:Twitter sdk 只支持ios9以上

    相关文章

      网友评论

      • 扛支枪:问下这个twitterkit是不是有发送数量限制,我这发三条之后就一直不成功了
        扛支枪:原因好像是同样的东西不能重复分享
      • a5d648fa7f2c:Implement the TWTRComposerViewControllerDelegate methods and set the delegate property to receive lifecycle updates about the Tweet compose operation.

        官方文档的最后一段,这个才是真正成功失败的回调吧,请教下作者这个怎么实现,我不是搞ios的,不太会
        Andi:@T乄Q 没见过这个报错, TWTRImageScrollView 这个类我也搜不到 你是用pods集成的吗?
        a5d648fa7f2c:@大苏Andi 最终项目编译的时候报了符号错误,是不是还需要链接其他什么库,下面是错误
        Undefined symbols for architecture arm64:
        "___isOSVersionAtLeast", referenced from:

        -[TWTRImageScrollView init] in TwitterKit(TWTRImageScrollView.o)
        麻烦帮忙看看,谢了
        Andi:时间太久 有点忘了 TWTRComposerViewController 这个类 好像我调试的时候有问题 ,所以没有使用。
      • 22a1314baf52:作者了解tweet card吗?H5中配置好twitter的tag元素后,iphone上不显示card,不知道你碰见过这个问题没?
        22a1314baf52:@大苏Andi 客户端是不会显示card的,是我想多了。。
        Andi:分享的时候 不传图片
      • 0033436be86e:您好,我的程序需要支持ios8,集成的2.8.1,但是IOS11掉不起这个SDK,换成3.0的SDK将支持改为IOS9就能吊起了,不知楼主有没解决办法
      • TimeLaoKey:[Twitter sharedInstance] 。这个方法都找不到呢
        Andi:@小小程序媛之路 查看一下你的plist 文件 字段是否都添加上了
        小小程序媛之路:[composer showFromViewController:presentingCon completion:^(TWTRComposerResult result) 你们调用这个方法不会崩吗
        Andi:#import <TwitterKit/TwitterKit.h> 里的 #import "Twitter.h" 就是
      • fly大梦想家:为什么一直重复授权啊啊啊
        fly大梦想家:@2711981419 解决了,具体怎么弄的我忘了,我是重新来了一遍,你试试把general下的linked frameworks and libraries中的twitter相关sdk删除看看
        1d2c9b77769c:兄弟解决这个问题了吗?
        TimeLaoKey:貌似是twitter的新规定
      • fly大梦想家:按照你的分享方法跳到twitter客户端再跳回app后,过会自己跳到网页版twitter的授权界面,点击授权又弹出一个授权界面,一直重复网页授权
        Andi:没遇到过这种情况,你在仔细检查下步骤 是否有没做的
      • 80feaac295dc:你好,我也在集成TwitterKit,但是好像第一次授权之后就记住用户了,以后直接在自己的app里面跳出分享框,并不会跳转到twitter客户端,如果需要切换twitter分享账号你是怎么处理的呢
        Andi:@小白交流 在 logInWithCompletion 的回调参数里 有NSError *error 参数
        我的处理是if(error){
        //没有安装Twitter
        }
        80feaac295dc:@大苏Andi 你好,我这边第一次获取授权的时候,如果用户没有安装twitter客户端,调用[[TWTRTwitter sharedInstance] logInWithCompletion并不会调起网页登陆,而是直接返回错误401,unauthorization,你有遇到这个问题吗
        Andi:没有处理过。 切换账号还是要在twitter客户端自己去切吧。像国内微信,微博 你也得去各自客户端切账号。和分享是两回事。

      本文标题:iOS Twitter SDK 集成分享功能

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