iOS-52-类似淘口令的开发-持续更新

前提

我们公司需要做一套口令分享功能。功能是可以分享直播间、商品、店铺等。可以直接到微信中粘贴给好友,好友可以直接复制后在APP内打开可以检测到分享的信息并弹出。下次打开不在展示

第一版

其实这个功能主要使用的还是系统自带的剪切板功能

UIPasteboard

只要将需要分享的文字复制到剪切板内就可以了,然后用户去微信直接粘贴就可以了。

然后在冷启动和热启动的时候调用检测方法就可以了

- (void)applicationWillEnterForeground:(UIApplication *)application

但是,遇到一个问题,如果我没有去微信粘贴呢,而是切换一下APP,然后直接再回到APP的时候就会立马弹出来分享的信息。这是不行的。

然后产品同学给出的解决办法是如果检测到该分享信息是本人分享出去的,就不做操作了

这样的话,在分享信息里面携带上分享者的信息,在进入APP的时候获取分享信息的时候校验一下是否是本人即可。

第二版

但是,问题来了。上线以后,需求方又要求,如果是本人打开的就要能打开信息。但是如果没有粘贴出去的或者不是从别处复制的就不能打开。

阿西吧。这个有点麻烦。去看了看剪切板的功能,貌似没有直接提供类似功能的。

投机取巧:

我发现,剪切板有两个方法可以进行字符串的赋值。

    NSString * valueString = pasteboard.string;
    NSArray * valueStringArray = pasteboard.strings;

但是一般呢,复制只会给string赋值。这样就有办法区分了。

在我们分享的时候赋值两部分,正常的分享内容还赋值给string

但是,同时给strings赋值数组,

        UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
        pasteboard.string = [CommonTools getStringWithDic:contDic key:@"shareContent"];
        pasteboard.strings = @[[CommonTools getStringWithDic:contDic key:@"shareContent"],@""];

这样的话,在每次APP启动的时候去做检测就好实现上面的功能了:

- (void)checkSharePassWord{
    __weak typeof(self) weakSelf = self;
    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
    NSString * valueString = pasteboard.string;
    NSArray * valueStringArray = pasteboard.strings;
    if ([valueStringArray isArray] && valueStringArray.count == 1 && ![CommonTools isBlankString:valueString]) {
        
        NSString * valueString = pasteboard.string;
        NSArray * valueArray = [valueString componentsSeparatedByString:@"¥"];
        if (valueArray.count == 3) {
            [NGLoginManager checkoueLogin:^{
                NSString * shareUrl = valueArray[1];
                NSMutableDictionary * dic = [NSMutableDictionary dictionary];
                [dic setObject:shareUrl forKey:@"shareUrl"];
                [NGActivitySeverManager postAPIResloveSharePasswordWith:dic Success:^(id  _Nonnull responseObject) {
                    NSDictionary * resDic = (NSDictionary *)responseObject;
                    SSPasswordModel * model = [SSPasswordModel ng_objectWithKeyValues:resDic];
                    [weakSelf showShareViewAndModel:model];
                } failure:^(NSError * _Nonnull error) {
                    dispatch_async(dispatch_get_main_queue(), ^{
                        NGHideHud;
                        NGShowMessage([error localizedDescription]);
                        UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
                        pasteboard.string = @"";
                        pasteboard.strings = @[@""];
                    });
                }];
            } error:^{
                
            }];
        }
    }
}

检测pasteboard.strings数组内容数量,如果是1,则是正常在他处赋值的,如果是2,则是在APP内赋值的,就是分享者自动粘贴的,不是从他处赋值的。

问题解决了

你可能感兴趣的:(iOS-52-类似淘口令的开发-持续更新)