V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xingshu1990
V2EX  ›  iOS

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

  •  
  •   xingshu1990 · 2021-04-16 09:04:01 +08:00 · 8965 次点击
    这是一个创建于 1321 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为 这些读取剪切板的国产 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 。

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

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

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

    @clrss #15 思路也不错,只不过 有没有比“马**是** ”更好的办法恶心一下恶意读剪贴板的
    jwing
        17
    jwing  
       2021-04-16 10:20:34 +08:00
    @jiayong2793 唯 KPI 最大导致的,这种扒光用户隐私,构建用户画像的发展策略,只要国家不立法禁止,就永远不会消失
    dynastysea
        18
    dynastysea  
       2021-04-16 10:55:19 +08:00   ❤️ 1
    我个人就没那么强的隐私概念,我觉得读取剪贴板这种功能真的超级方便。。。你们可以来鄙视我了。。
    watcher
        19
    watcher  
       2021-04-16 11:14:07 +08:00
    国外也有不少吧?
    drrrtt
        20
    drrrtt  
       2021-04-16 11:19:06 +08:00
    @doveyoung #16 sql 注入啦"drop table dbo.*"
    also24
        21
    also24  
       2021-04-16 11:23:10 +08:00   ❤️ 3
    唉…… 都怪 Android 太开放,后台应用不能读写剪贴板,想做个剪贴板自动清理都不行,真是垃圾系统啊 🙄

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

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

    ----

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

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

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

    @watcher 几乎没有
    wipbssldo
        41
    wipbssldo  
       2021-04-16 14:21:08 +08:00
    @dingwen07 那说明 MIUI 掌握了你所有剪贴板里的码?
    mfmal
        42
    mfmal  
       2021-04-16 15:41:08 +08:00
    至于更大的监控 ——
    我建议出生的时候就别上户口,那就没人能监控到你
    xingshu1990
        43
    xingshu1990  
    OP
       2021-04-16 15:43:48 +08:00
    @mfmal #42 可以啊,拐到一些地方 打折了手和脚当乞丐,或者关到黑砖窑,或者是偏僻矿区。
    also24
        44
    also24  
       2021-04-16 16:06:56 +08:00
    @xingshu1990 #31
    对应验证码场景,其实 Android 在 8.0 版本开始就已经提供了解决方案。(需要厂商主动接入)
    https://danielw.cn/android-new-feature-sms-verification

    xiangbohua
        45
    xiangbohua  
       2021-04-16 16:29:26 +08:00
    希望 IOS 后面出禁止访问剪贴板的功能吧,毕竟我知道她访问了剪贴板又怎么样呢?
    ZSeptember
        46
    ZSeptember  
       2021-04-16 16:36:47 +08:00
    然后 ios 并不可以禁用复制剪切板
    Biggoldfish
        47
    Biggoldfish  
       2021-04-16 16:44:16 +08:00 via Android
    动心思那么直接卸载就是了
    charlie21
        48
    charlie21  
       2021-04-16 17:14:02 +08:00
    都是月亮惹的祸
    avia1ae
        49
    avia1ae  
       2021-04-16 17:39:54 +08:00
    苹果现在的功能挤牙膏太严重了,相比 IDFA,更希望这次能加入剪切板的隐私权限,IDFA 无非就是一个匿名识别码,剪切板这种东西能包含的东西就多了去了。
    qianmoumou
        50
    qianmoumou  
       2021-04-16 17:42:46 +08:00
    悲观的说,可以躺平了,国内的隐私环境,这点小聪明解决不了什么。现在基本一个手机号走天下,从广告投放的角度无所遁形。只要消费理性,无所谓的。
    secretman
        51
    secretman  
       2021-04-16 18:08:39 +08:00
    MIUI 就能控制剪贴板权限啊,1202 年了,可以醒醒了,还有别说 MIUI 广告的问题了,我用了快一年,拿到手就关广告,根本就没弹广告~
    YY
        52
    YY  
       2021-04-16 19:33:02 +08:00
    Mac 上不能随便复制东西了 自动同步到 iPhone
    hkezh
        53
    hkezh  
       2021-04-16 19:52:31 +08:00 via iPhone
    应该禁止一部分 app 读取剪贴板
    Hackerchai
        54
    Hackerchai  
       2021-04-16 20:24:40 +08:00
    楼主这简书链接 https://www.jianshu.com/p/10a6900cc904?from=timeline 是我学长,碰熟人了
    godpeo
        55
    godpeo  
       2021-04-16 20:45:56 +08:00 via iPhone
    @also24 那其他安卓 app 不一样读取不了
    Ballmer
        56
    Ballmer  
       2021-04-16 22:34:07 +08:00
    @drunkdog 你甚至不愿意叫他们一句:股东和精神股东
    Jaeden
        57
    Jaeden  
       2021-04-17 06:39:28 +08:00
    开发人员不背这个锅,产品说了算
    xuanbg
        58
    xuanbg  
       2021-04-17 08:56:41 +08:00
    这和开发人员又个半毛钱关系啊,还不是产品花样多。。。
    xshenmi
        59
    xshenmi  
       2021-04-17 11:00:36 +08:00
    @secretman 喊一下米厂把“广告可以关”做成“广告可以开”怎么样?
    mfmal
        60
    mfmal  
       2021-04-17 11:48:30 +08:00 via iPhone
    @xingshu1990 那不挺自由的么,想找也找不到,也没人知道有这么个人存在,也不会有人找
    loarland
        61
    loarland  
       2021-04-18 10:33:56 +08:00
    开发背不了这个锅,这坑代码自己都不想去写
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5518 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 08:58 · PVG 16:58 · LAX 00:58 · JFK 03:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.