因为国内部分开发人员的小心思,所以我更偏向较为封闭的 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 。

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

8991 次点击
所在节点    iOS
61 条回复
terrytang1
2021-04-16 09:05:36 +08:00
不能说开发人员的小心思,都是公司,产品的结果导物,ios 是比较强制
EasonC
2021-04-16 09:07:06 +08:00
划重点,国内开发人员小心思,安卓党是时候换一波手机了
drunkdog
2021-04-16 09:07:26 +08:00
应该说是老板及其狗腿的小心思
xingshu1990
2021-04-16 09:11:46 +08:00
1 2 3 楼的朋友 其实说的是对的,国内公司领导的问题,不是开发人员的问题。在此修改。
wellsc
2021-04-16 09:12:04 +08:00
难道不是产品的心思吗?作为开发表示能够少写一行业务代码就尽量少写
2kCS5c0b0ITXE5k2
2021-04-16 09:16:45 +08:00
开发巴不得不写这些奇奇怪怪的功能
ericwoflskin
2021-04-16 09:16:58 +08:00
都是一伙人,自己在做啥又不是不知道,又没人拿枪顶着脑门,还不是为了钱。
jiayong2793
2021-04-16 09:18:55 +08:00
有没有人验证一下,当我从 mac 上复制一个文件的时候,这种方法是读取文件路径还是文件流?

也就是说,手机上的 app 能否通过这种方式访问 mac 上的文件
jiayong2793
2021-04-16 09:19:56 +08:00
@xingshu1990 本质上来说是国内互联网企业盈利模式单一,都是靠广告盈利
trlove
2021-04-16 09:24:59 +08:00
@jiayong2793 mac 复制文件 在微信聊天窗口复制的时候 粘贴出来的是文件名 其他地方粘贴没试过 应该能读取文件
antiquezzz
2021-04-16 09:34:58 +08:00
说个确切的,ios 玩球球大作战,每次一进去就提示读取了粘贴板(类似),所以这跟 ios 和 android 没什么关系吧,可能 android 提示都不给提示?
Muniesa
2021-04-16 09:35:12 +08:00
但就剪贴板这个问题,国产 android 的保护不是做的更好吗
xumng123
2021-04-16 09:35:43 +08:00
开发人员没有小心思,那是老板的大战略
joesonw
2021-04-16 09:43:57 +08:00
都是希特勒是灭犹太人, 为什么要审判我们?
clrss
2021-04-16 09:56:17 +08:00
与其捷径自动清空剪贴板, 我建议把剪贴板改成: 马**是**
doveyoung
2021-04-16 10:15:22 +08:00
我目前是用捷径清空剪贴板,敲三下手机背部执行

@clrss #15 思路也不错,只不过 有没有比“马**是** ”更好的办法恶心一下恶意读剪贴板的
jwing
2021-04-16 10:20:34 +08:00
@jiayong2793 唯 KPI 最大导致的,这种扒光用户隐私,构建用户画像的发展策略,只要国家不立法禁止,就永远不会消失
dynastysea
2021-04-16 10:55:19 +08:00
我个人就没那么强的隐私概念,我觉得读取剪贴板这种功能真的超级方便。。。你们可以来鄙视我了。。
watcher
2021-04-16 11:14:07 +08:00
国外也有不少吧?
drrrtt
2021-04-16 11:19:06 +08:00
@doveyoung #16 sql 注入啦"drop table dbo.*"

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

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

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

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

© 2021 V2EX