前提
我們公司需要做一套口令分享功能母债。功能是可以分享直播間、商品笋妥、店鋪等懊昨。可以直接到微信中粘貼給好友春宣,好友可以直接復(fù)制后在APP內(nèi)打開可以檢測到分享的信息并彈出疚颊。下次打開不在展示
第一版
其實(shí)這個(gè)功能主要使用的還是系統(tǒng)自帶的剪切板功能
UIPasteboard
只要將需要分享的文字復(fù)制到剪切板內(nèi)就可以了狈孔,然后用戶去微信直接粘貼就可以了。
然后在冷啟動(dòng)和熱啟動(dòng)的時(shí)候調(diào)用檢測方法就可以了
- (void)applicationWillEnterForeground:(UIApplication *)application
但是材义,遇到一個(gè)問題均抽,如果我沒有去微信粘貼呢,而是切換一下APP其掂,然后直接再回到APP的時(shí)候就會(huì)立馬彈出來分享的信息油挥。這是不行的。
然后產(chǎn)品同學(xué)給出的解決辦法是如果檢測到該分享信息是本人分享出去的款熬,就不做操作了
這樣的話深寥,在分享信息里面攜帶上分享者的信息,在進(jìn)入APP的時(shí)候獲取分享信息的時(shí)候校驗(yàn)一下是否是本人即可贤牛。
第二版
但是惋鹅,問題來了。上線以后殉簸,需求方又要求闰集,如果是本人打開的就要能打開信息。但是如果沒有粘貼出去的或者不是從別處復(fù)制的就不能打開般卑。
阿西吧武鲁。這個(gè)有點(diǎn)麻煩。去看了看剪切板的功能蝠检,貌似沒有直接提供類似功能的沐鼠。
投機(jī)取巧:
我發(fā)現(xiàn),剪切板有兩個(gè)方法可以進(jìn)行字符串的賦值叹谁。
NSString * valueString = pasteboard.string;
NSArray * valueStringArray = pasteboard.strings;
但是一般呢饲梭,復(fù)制只會(huì)給string賦值。這樣就有辦法區(qū)分了焰檩。
在我們分享的時(shí)候賦值兩部分憔涉,正常的分享內(nèi)容還賦值給string
但是,同時(shí)給strings賦值數(shù)組锅尘,
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
pasteboard.string = [CommonTools getStringWithDic:contDic key:@"shareContent"];
pasteboard.strings = @[[CommonTools getStringWithDic:contDic key:@"shareContent"],@""];
這樣的話监氢,在每次APP啟動(dòng)的時(shí)候去做檢測就好實(shí)現(xiàn)上面的功能了:
- (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數(shù)組內(nèi)容數(shù)量布蔗,如果是1藤违,則是正常在他處賦值的,如果是2纵揍,則是在APP內(nèi)賦值的顿乒,就是分享者自動(dòng)粘貼的,不是從他處賦值的泽谨。