淘口令的处理
2020-11-19 本文已影响0人
蓝空天末
前阵子项目中遇到了活动开团,开团人或参团人通过分享口令到微信等,其他人通过复制口令然后打开app,会检测口令弹出提示,去查看活动或加入组团。
口令分享出去,在其他app粘贴或复制口令,一定是使用系统的剪切板UIPasteboard。
UIPasteboard常用属性string肯定无法胜任,因为自己的app可以对系统剪切板进行操作,别的app当然也可以对系统剪切板进行操作。肯定会出现不满足需求的异常情况。
查看UIPasteboard类,会发现还有两个不常用的属性strings和items。于是,分别尝试对strings、items操作,验证效果。
1、strings
分享口令前,同时对剪切板UIPasteboard的string、strings进行赋值
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
pasteboard.string = @"口令";
pasteboard.strings = @[@"口令",@""];
打开app进入前台时,读取UIPasteboard的strings数组的count。如果是2,就是从本app复制了口令,去别处分享后,又回到了本app,此时不需要处理自己分享出去的口令;如果count是1,就是从别处复制的口令,打开app,此时需要解析口令,解析口令做出响应后,根据需要可以清空剪切板的string、strings。
2、items
分享口令前,分别对string、items赋值。
UIPasteboard * pasteboard = [UIPasteboard generalPasteboard];
pasteboard.string = content;
//给剪切板加一条标记性的数据,检测剪切板的数据是否来自当前应用
NSDictionary<NSString *, id> *item = @{@"标记":@"口令"};
[systemBoard addItems:@[item]];
打开app进入前台时,读取UIPasteboard的items,遍历item的中的NSDictionary的key是否含有@"标记"。如果有就是从本app复制了口令,回到本app时不需要处理。如果没有,就不是本app分享出去又回到本app,此时需要解析口令。