因为国内部分开发人员的小心思,所以我更偏向较为封闭的 iPhone 手机。

2021-04-16 09:04:01 +08:00
 xingshu1990

因为 这些读取剪切板的国产 app 是真的烦: https://fast.v2ex.com/t/770796 这个帖子,我特地去搜索 IOS 自动化 清空剪切板,于是发现下面的内容

https://www.jianshu.com/p/10a6900cc904?from=timeline

以下是以上网址中的文字,涉及到的代码 不做验证,只想说有人动歪脑筋。

之前用淘宝给微信好友分享链接的时候,发现在微信中复制了宝贝的链接,然后再从后台切换到淘宝客户端,淘宝就会弹出一个页面,询问是否要跳转到相关页面,今天试着实现了一下,分享出来~

//识别剪贴板中的内容
if let paste = UIPasteboard.generalPasteboard().string where
    (paste.hasPrefix("http://") || paste.hasPrefix("https://")) { 
    //如果剪贴板中的内容是链接
    let alert = UIAlertController(title: "要打开剪贴板中的链接吗?",
        message: nil,
        preferredStyle: UIAlertControllerStyle.Alert)
    alert.addAction(UIAlertAction(title: "打开",
        style: UIAlertActionStyle.Default,
        handler: { Void in
            // your implementation
            print(paste)
    }))
    alert.addAction(UIAlertAction(title: "忽略",
        style: UIAlertActionStyle.Cancel,
        handler: nil))
    //弹出 Alert
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    if let vc = storyboard.instantiateViewControllerWithIdentifier("navi") as? UINavigationController {
        self.window?.rootViewController = vc
        vc.presentViewController(alert, animated: true, completion: nil)
    }
}

获取设备的剪贴板很简单,第一行代码就搞定了,if 语句中判断了一下剪贴板中的内容是不是链接,注意 http 和 https 都要写上,这点很容易被忽略(在浏览器地址栏中复制以 www.开头的文本会自动在剪贴板中转为 http 或 https 开头的链接)。

更值得注意的是,因为你需要让 App 在每次从后台进入前台的时候都检测一下剪贴板中有没有链接,所以以上方法要放在 AppDelegate 文件的 applicationWillEnterForeground 方法中。

AppDelegate.swift 而这个方法中是不能通过 self 来调用 ViewController 的,所以要曲线救国的话,你需要手动获取 Storyboard 、ViewController,再设置 window 的 rootViewController 才能去掉所有报错和警告。

(这里我只是把剪贴板中的链接输出到控制台了,想要自己用 UIWebView 打开链接的话,在 // your implementation 这句注释这里写自己的方法吧)

[ 150928 更新]

对比 applicationWillEnterForeground 和 applicationDidBecomeActive 这两个方法,前者是指 App 从后台进入前台,后者是指 App 处于活跃状态,所以前者相对于后者,缺少的部分是,当 App 刚刚启动,而不是从后台取出的时候,它无法识别剪贴板。 因为你不能要求每次都让用户先把 App 打开,再往剪贴板里面填东西,再跳转回来,所以个人建议把上面的代码放在 applicationDidBecomeActive 方法中,而不是 applicationWillEnterForeground 。

———————————— 关于更大的监控,不用在这里讨论,大家放心里就好。

8721 次点击
所在节点    iOS
61 条回复
also24
2021-04-16 11:23:10 +08:00
唉…… 都怪 Android 太开放,后台应用不能读写剪贴板,想做个剪贴板自动清理都不行,真是垃圾系统啊 🙄

https://developer.android.com/about/versions/10/privacy/changes?hl=zh-cn#clipboard-data
Jirajine
2021-04-16 11:30:39 +08:00
Android 可以为每个应用单独调整剪贴板的访问权限。
felixcode
2021-04-16 11:33:45 +08:00
我不懂移动端的开发,但这里引用的是 15 年的内容,六年了没啥变化吗?
Cu635
2021-04-16 11:39:51 +08:00
不要侮辱开发人员,这明明是产品经理 /公司 /资本的心思。
winddweb
2021-04-16 11:40:19 +08:00
安卓下个版本就会有读取剪贴板提示了🥴
yigecaiji
2021-04-16 11:47:04 +08:00
他要是只是在本地分析还好,就怕™每次打开 app 都把你剪贴板的内容上传到服务器去分析。
en20
2021-04-16 12:01:58 +08:00
为什么开发要出来挨打😭冤啊
jiayong2793
2021-04-16 12:12:07 +08:00
@Cu635 产品经理也是被 KPI 逼的
victor
2021-04-16 12:14:30 +08:00
@jiayong2793 本质上来说是国内互联网企业盈利模式单一,都是靠广告盈利

能否给一些国外互联网企业的盈利模式,不靠广告那种
processzzp
2021-04-16 12:17:39 +08:00
@dynastysea 好的,已 Block
xingshu1990
2021-04-16 12:37:02 +08:00
@dynastysea #18 比如微信重置密码,要读取手机短信,那你只读取收取验证码的信息就好,不读取其他的信息的标题或者内容,这完全无可厚非,而现在,不能明确的说这些 APP 有直接读取隐私的情况,因为这中间还涉及到抓包的情况,技术上锤这些 APP 还是有点难度。
简单都说,不是我们有强烈的隐私概念,而是有点精神洁癖。
johnkiller
2021-04-16 12:52:25 +08:00
对我的困扰就是 iOS14 读剪贴板会一直弹窗提示,还不能关。每次打开 QQ 它居然连读三四次,然后屏幕上就开始疯狂弹窗……
mschultz
2021-04-16 12:57:19 +08:00
@xingshu1990 #31
进一步,实际上微信连任何短信,包括验证码短信也不应该读取。iOS 的做法是让系统自带输入法读取短信,然后做一个一键快捷填写。

----

我觉得读取剪贴板这件事可能大部分场景( 80%+?)都是不必要的、不最优的、捏着鼻子妥协的存在。

举个例子:在微信里打开朋友发来的淘宝链接,正常人的思维是什么?点一下,打开,不香吗。结果厂商为了限制对家流量,互相屏蔽,然后再搞出火星文复制粘贴识别的一套流程。这不是脱裤子放屁嘛。

本来互联网产品大家互相超链接「互联」好好的,我们应是眼睁睁地看着这个行业往互相屏蔽、流量圈地,然后搞个妥协流程来恶心用户的方向发展。市场如此,个人用户似乎也无能为力。
xingshu1990
2021-04-16 13:06:47 +08:00
@mschultz #33 因为有些互联网公司,在 URL 加入某些字段,在统计日志的时候,用来统计不同数据来源的地方,获得的流量,或者测试流量玩法,测试活动吸粉人数。
有精神洁癖的用户呢,就想办法给互联网公司喂脏数据:就算我主动给 APP 喂屎,APP 主动推送屎,我也不觉得难受。
xingshu1990
2021-04-16 13:09:27 +08:00
@xingshu1990 #34 像我这类人呢,就是不喜欢 APP 主动推送信息,包括但不限于历史购物产品降价,或者我买了篮球鞋,APP 就推送我鞋子护理物品,或者鞋带,鞋垫。
我会自己去买,但不要你推送给我。
qing108
2021-04-16 13:49:56 +08:00
关于这个你应该喷腾讯才对,如果不是腾讯垄断,搞恶意竞争,不让竞争对手在微信和 qq 上分享,根本不会有这么多事情
dingwen07
2021-04-16 13:54:05 +08:00
MIUI 能自动识别各种剪贴板里的码,对不属于 app 的内容询问是否允许,不比你这个强多了
340746
2021-04-16 13:56:26 +08:00
该死的百度网页还会修改剪贴板,真希望能有办法禁止。
toptyloo
2021-04-16 14:04:52 +08:00
单就剪贴板而言,Android 是可以控制剪贴板权限的。。。
honeycomb
2021-04-16 14:10:08 +08:00
@antiquezzz Android 底层部署了这个功能(包含读取,写入权限的控制),想用的话可以整一个 rikka 的 appops 加以利用。
但原生系统要到 Android12 才会将其发布。

@watcher 几乎没有

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/770993

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX