随着iOS 14的发布,剪切板的滥用也被大家所知晓。只要是APP读取剪切板内容,系统都会在顶部弹出提醒,而且这个提醒不能够关闭。这样,大家在使用APP的过程中就能够看到哪些APP使用了剪切板。

正好我们自己的应用也使用了剪切板,升级了iOS 14之后弹的着实让人心烦。就想着怎么处理一下,翻了一下UIPasteboard的文档,发现相关的内容并不多。

读取UIPasteboardstringstringsURLURLsimageimagescolorcolors的时候会触发系统提示。

使用hasStringshasURLshasImageshasColors等方法的时候不会触发系统提示。

那么思路就是尽可能少的去调用会触发系统提示的方法,根据其他方法去判断确实需要读取的时候再去调用那些方法。

根据我们自己的情况,只有判断hasStringsYES就去读取,又不能清剪切板,其实还是有点不尽人意,然后又看到这个属性:

@property(readonly, nonatomic) NSInteger changeCount;
The number of times the pasteboard’s contents have changed.

Whenever the contents of a pasteboard changes—specifically, when pasteboard items are added, modified, or removed—UIPasteboard increments the value of this property. After it increments the change count, UIPasteboard posts the notifications named UIPasteboardChangedNotification (for additions and modifications) and UIPasteboardRemovedNotification (for removals). These notifications include (in the userInfo dictionary) the types of the pasteboard items added or removed. Because UIPasteboard waits until the end of the current event loop before incrementing the change count, notifications can be batched. The class also updates the change count when an app reactivates and another app has changed the pasteboard contents. When users restart a device, the change count is reset to zero.

然后就又加了一个条件,记录一下真正读取剪切板时的changeCount,如果下次读取的时候没有发生变化则不读取。

这样一来效果就好多了,应用运行生命周期内,基本上只会弹出一次提示。

但是,后来看到淘宝更牛逼,命中了真正分享出来的内容才会弹,其他则不会弹。然后就研究了一下淘宝的分享内容和新的API文档,大概得到了答案。

先看下淘宝的分享内容:

9幅治内容 Http:/T$AJg8c4IfW3q$打開绹..寶【贵州茅台酒 茅台 飞天53度酱香型白酒收藏 500ml*1单瓶装送礼高度】

组成部分:数字+文字+链接的形势,再结合iOS 14提供的新API:

detectPatternsForPatterns:completionHandler:
detectPatternsForPatterns:inItemSet:completionHandler:

UIPasteboardDetectionPattern系统只提供了三种:

  1. 数字 UIPasteboardDetectionPatternNumber
  2. 链接 UIPasteboardDetectionPatternProbableWebURL
  3. 搜索UIPasteboardDetectionPatternProbableWebSearch

大胆猜测,淘宝应该是通过判断是否符合数字和链接的规则来判断是否命中分享内容。

然后就写了一个demo来验证,核心代码如下:

UIPasteboard *board = [UIPasteboard generalPasteboard];

[board detectPatternsForPatterns:[NSSet setWithObjects:UIPasteboardDetectionPatternProbableWebURL, UIPasteboardDetectionPatternNumber, UIPasteboardDetectionPatternProbableWebSearch, nil]
completionHandler:^(NSSet<UIPasteboardDetectionPattern> * _Nullable set, NSError * _Nullable error) { BOOL hasNumber = NO, hasURL = NO;
for (NSString *type in set) {
if ([type isEqualToString:UIPasteboardDetectionPatternProbableWebURL]) {
hasURL = YES;
} else if ([type isEqualToString:UIPasteboardDetectionPatternNumber]) {
hasNumber = YES;
}
} if (hasNumber && hasURL) { dispatch_async(dispatch_get_main_queue(), ^{
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"温馨提示" message:[NSString stringWithFormat:@"%@\n%@", [board string], @"符合淘宝的读取标准"] preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleCancel handler:nil];
[alert addAction:cancelAction];
[self presentViewController:alert animated:YES completion:nil];
});
}
}];

然后构造了一个看起来符合条件1 http:/123abc的串去反向验证了一下发现demo和淘宝的结果的表现是一致的,都弹了系统提示。

具体的demo可去github下载。

原地址:https://y500.me/2020/09/27/ios14_taobao_uipasteboard/

iOS14剪切板探究,淘宝实现方法分析的更多相关文章

  1. Flash10下复制到剪切板的一种新方法

    web开发中常常要实现“复制到剪切板”功能.这个功能很实用,但是由于安全问题,浏览器的限制越来越严,实现的方法也越来越有限了.Firefox默认下不能直接通过Javascript操作剪切板,必须开启相 ...

  2. Python 爬取淘宝商品数据挖掘分析实战

    Python 爬取淘宝商品数据挖掘分析实战 项目内容 本案例选择>> 商品类目:沙发: 数量:共100页  4400个商品: 筛选条件:天猫.销量从高到低.价格500元以上. 爬取淘宝商品 ...

  3. VFP 图形文件与剪切板互换的API解决方法

    在 VFP 中,凡遇图形处理,大多数情况下,都会涉及到图形文件与剪切板互换的情况.下面给出利用 API 解决的方法.这是原来从网上摘下来的,版权归原作者.基本处理的代码如下,你可以将其应用到你的代码中 ...

  4. Ruby Gems更换淘宝源方法

    官方的 Rubygems 源由于有些资源放在 Amazon S3 上面,所以有时会抽风,在 Linux 下我用 proxychains gem install xxx 实现了指定程序实行 Shadow ...

  5. Android 淘宝搜索记录分析及千牛数据库名称关联

    一 taobao搜索关键字分析1.导出淘宝数据文件夹.2.搜索search 找到search文件夹.查看里面可疑文件如history_8d4255cc9c9199c6ec3be940936986b9. ...

  6. 淘宝的TProfile分析

    TProfile是一个用来抓取性能数据的工具.大概是去年的时候对其分析了一下,并将它改造成了用于分析学习开源产品时的一个trace工具(不是很完善,自己用够用).现在将之前的笔记翻出来,记录一下. 1 ...

  7. 淘宝Diamond架构分析

    转载:http://blog.csdn.net/szwandcj/article/details/51165954 早期的应用都是单体的,配置修改后,只要通过预留的管理界面刷新reload即可.后来, ...

  8. 淘宝弹性布局方案lib-flexible实践

    2个月前,写过一篇文章<从网易与淘宝的font-size思考前端设计稿与工作流>总结过一些移动web中有关手机适配的一些思路,当时也是因为工作的关系分析了下网易跟淘宝的移动页面,最后才有那 ...

  9. 【转】淘宝技术牛p博客整理

    转自:http://blog.csdn.NET/zdp072/article/details/19574793 淘宝技术委员会是由淘宝技术部高级技术人员组成的一个组织,共分为Java分会.C/C++分 ...

随机推荐

  1. 常见面试题之操作系统中的LRU缓存机制实现

    LRU缓存机制,全称Least Recently Used,字面意思就是最近最少使用,是一种缓存淘汰策略.换句话说,LRU机制就是认为最近使用的数据是有用的,很久没用过的数据是无用的,当内存满了就优先 ...

  2. v-html渲染富文本图片宽高问题

    v-html渲染富文本v-html是用来渲染html的节点及字符串的,但是渲染后富文本里的图片宽高会溢出所在div的区域但是使用css直接给img是没有办法设置img的宽高的,需要使用深层级来给img ...

  3. Java高级特性——反射机制(第一篇)

    ——何为动态语言,何为静态语言?(学习反射知识前,需要了解动态语言和静态语言) 动态语言 >是一类在运行时可以改变其结构的语言,例如新的函数.对象.甚至是代码可以被引进,已有的函数可以被删除或者 ...

  4. python官网打不开

    这可能是因为该站点使用过期的或不安全的 TLS 安全设置. 解决:依次打开IE的Internet选项.高级,往下拉,找到安全模块,勾上四个使用:使用SSL 3.0.使用TLS 1.0.使用TLS 1. ...

  5. py_二分查找

    ''' 查找:在一些数据元素中,通过一定的方法找出与关键字相同元素的过程, 列表查找:从列表中查找指定元素 输入:列表.待查找元素 输出:元素下标(未找到元素时一般返回None或-1) 内置列表查找函 ...

  6. 关于windou环境下使用http或者ftp搭建网络hu共享

    第一步 右键此电脑进入控制面 第二步:进入程序点击启用或关闭windous功能 第三步进入服务开启界面 点击让windows更新为你下载文件,并保存更改完,然后关闭 四:邮件我的电脑进入管理 四右键添 ...

  7. Chrome开发者工具调试详解

    chrome开发者工具最常用的四个功能模块:元素(ELements).控制台(Console).源代码(Sources),网络(Network). 元素(Elements):用于查看或修改HTML元素 ...

  8. Maxscript中渲染中文版Vray完成贴图(VrayCompleteMap)的方法

    Objbakeproperties = $.INodeBakeProperties; --选定对象的烘培节点 Prjbakeproperties = $.INodeBakeProjProperties ...

  9. Leetcode 1577 数的平方等于两数乘积的方法数

    Leetcode 1577 数的平方等于两数乘积的方法数 题目 给你两个整数数组 nums1 和 nums2 ,请你返回根据以下规则形成的三元组的数目(类型 1 和类型 2 ): 类型 1:三元组 ( ...

  10. C003:计算球体体积 自行输入球体半径

    程序: #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { float sphereRadius; do{ pri ...