iOS Twitter SDK 集成分享功能

作者: _Andy_ | 来源:发表于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的,不太会
    _Andy_:@T乄Q 没见过这个报错, TWTRImageScrollView 这个类我也搜不到 你是用pods集成的吗?
    a5d648fa7f2c:@大苏Andi 最终项目编译的时候报了符号错误,是不是还需要链接其他什么库,下面是错误
    Undefined symbols for architecture arm64:
    "___isOSVersionAtLeast", referenced from:

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

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

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