抖音私信名片纯文本跳转自定义关注微信脚本代码技术方法分享

  • A+
  抖音私信名片小编做一个抖音的私信名片链接,分析抖音app的原理后,需要一些加工方法,步骤记录如下:
  在这里插入图片描述

  Charles数据采集

  对于移动端开发者来说,并不是每个项目都有机会可以直接接触到后端代码,所以进行网络请求调试时,借助Charles、Fiddler、Wireshark等测试工具对请求进行抓包分析,将使请求细节清晰明了的展现在开发者眼前,降低开发者的调试难度。除此之外,对他人开发的app网络请求进行抓包分析也有助于学习其API架构思路。在这里我们则使用Charles分析抖音app的API设计并获取相应的json请求数据,用来搭建本项目所需使用到的网络请求API。

  [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  抓包步骤:电脑端安装Charles并打开,然后打开需要进行网络请求抓包的移动设备,选择设置→无限局域网→"当前连接的网络名称"→蓝色感叹号图标→配置代理→手动,服务器一栏填入电脑端的ip地址,端口填写8888(Charles默认端口,可修改),最后点击保存即可进行抓包分析。HTTPS请求抓包则需在移动端浏览器打开chls.pro/ssl地址并安装证书即可,注意需要在移动端设备设置了代理的情况下进行。

  如下图所显示,我们便获取了抖音所调用的网络请求接口数据,根据这些接口数据搭建了本项目所使用的网络请求API。

  在这里插入图片描述
  网络请求API接口

  抖音demo的数据来自Charles抓包,这些数据被抓取后存储在抖音demo对应的服务器数据库中,以这些数据为基础搭建了抖音demo中的网络请求API,网络请求数据返回格式为json,所有接口返回的json数据结构如下所示:

  //重写layoutAttributesForElementsInRect方法

  -(NSArray*)layoutAttributesForElementsInRect:(CGRect)rect{

  //获取当前在屏幕rect中显示的元素属性

  NSMutableArray*superArray=[[superlayoutAttributesForElementsInRect:rect]mutableCopy];

  //移除掉所有Header和Footer类型的元素,因为抖音个人主页中只有第一个section包含Header和Footer类型元素,

  即移除需要固定的Header和Footer,因为后续会单独添加,为了避免重复处理。

  for(UICollectionViewLayoutAttributes*attributesin[superArraymutableCopy]){

  if([attributes.representedElementKindisEqualToString:UICollectionElementKindSectionHeader]){

  [superArrayremoveObject:attributes];

  }

  }

  //单独添加上一步移除的Header和Footer,单独添加是因为第一步只能获取当前在屏幕rect中显示的元素属性,当第一个Sectioin移除屏幕便无法获取Header和Footer,

  这是需要单独添加Header和Footer以及第二部单独移除Header和Footer的原因。

  [superArrayaddObject:[superlayoutAttributesForSupplementaryViewOfKind:UICollectionElementKindSectionHeaderatIndexPath:[NSIndexPathindexPathForItem:0inSection:0]]];

  [superArrayaddObject:[superlayoutAttributesForSupplementaryViewOfKind:UICollectionElementKindSectionFooteratIndexPath:[NSIndexPathindexPathForItem:0inSection:0]]];

  //codebywww.douyin1688.com

  //循环当前获取的元素

  for(UICollectionViewLayoutAttributes*attributesinsuperArray){

  //判断是否是第一个section

  if(attributes.indexPath.section==0){

  //判断是否为Header类型

  if([attributes.representedElementKindisEqualToString:UICollectionElementKindSectionHeader]){

  //获取Header的Frame

  CGRectrect=attributes.frame;

  //判断Header的bottom是否滑动到导航栏下方

  if(self.collectionView.contentOffset.y+self.navHeight-rect.size.height>rect.origin.y){

  //修改Headerframe的y值

  rect.origin.y=self.collectionView.contentOffset.y+self.navHeight-rect.size.height;

  attributes.frame=rect;

  }

  //设施Header层级,保证Header显示时不被其它cell覆盖

  attributes.zIndex=5;

  }

  //判断是否为Footer类型

  if([attributes.representedElementKindisEqualToString:UICollectionElementKindSectionFooter]){

  //获取Footer的Frame

  CGRectrect=attributes.frame;

  //判断Footer的top是否滑动到导航栏下方

  if(self.collectionView.contentOffset.y+self.navHeight>rect.origin.y){

  //修改Footerframe的y值

  rect.origin.y=self.collectionView.contentOffset.y+self.navHeight;

  attributes.frame=rect;

  }

  //设施Footer层级,保证Footer显示时不被其它cell覆盖,同时显示在Header之上

  attributes.zIndex=10;

  }

  }

  }

  //返回修改后的元素属性

  return[superArraycopy];

  }

  //重写shouldInvalidateLayoutForBoundsChange方法

  -(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBound{

  returnYES;//返回YES,修改newBound内的元素属性

  }
  在这里插入图片描述

  结构总览

  本项目共分为三个部分。第一部分为抖音个人主页实现,包含NSOperationQueue多队列解析webp动图、网络资源二级缓存框架搭建。第二部分围绕AVPlayerLayer展开,涉及网络视频边播放边下载、UITableView控制多个视频源播放。第三部分则为WebSocket实现IM即时聊天,其中穿插文本计算、表情编辑等功能。三个部分都涉及网络请求、json数据模型转换以及手势、动画效果处理。项目文件结构则如下图所示:

  布局、接口分析

  抖音聊天界面和大部分app聊天界面功能设计上基本一致,UITableView用于显示聊天消息列表,底部一个UITextView用于消息文本编辑,除此之外还有UICollectionView实现的表情选择器、图片选择器用于发送表情、图片信息。
  在这里插入图片描述

在线演示地址 www.dycard.com.cn
所属分类:抖音资讯
版权声明