iOS Twitter SDK 集成分享功能

4,593 阅读3分钟
  • 随着中国互联网企业走向海外,越来越多的中国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

集成成功下一步

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]);
            }
        }];
    }

  • 展示样式 :这种正常推文 只能点击在蓝色的连接才能 跳转网页,点击图片是图片浏览器

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

和上面方法是一样的 去掉图片添加的方法 。 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]);
         }
      }];
}

  • 展示样式 这种大卡片的方式 点击大卡片就跳转网页了。没有图片浏览

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以上