如果使用友盟SDK来完成微信消息的分享,如果分享成功选择返回程序,那么分享回调就可以正常的调用,可是如果选择留在微信,然后再通过左上角返回或者退回HOME之后再打开程序,都不会走分享回调.
可是有时候业务要求分享成功就需要做一些操作,比如分享后给予一些奖励之类的,如果别人分享成功之后没有获取到肯定是不对的.
解决方案最安全也是最简单的,就是在分享之前弹窗提示用户要选择返回程序才能正常使用,如果不想这么做,那么只能自己做一些处理了
首先是点击分享标签时
[UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) {
//在这里做一个表示符
[[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"isShare"];
//正常的分享流程
}
然后就是分享回调里
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options{
//能走到这里表示用户选择的是直接返回程序
//那么直接处理回调,删掉标识符
[NSUserDefaults standardUserDefaults]removeObjectForKey:@"isShare"];
//处理回调
}
那么如果用户选择留在微信,我们就需要在
- (void)applicationDidBecomeActive:(UIApplication *)application
里面对标识符进行操作了,包括删除标识符,回调操作等等
当然可能操作并不是在appdelegate里进行的,我们可以在需要操作的地方对BecomeActive进行监听
//监听
1.[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil];
2.//监听处理
- (void)applicationDidBecomeActive:(NSNotification *)notification {
//删掉标识符
[NSUserDefaults standardUserDefaults]removeObjectForKey:@"isShare"];
// 回调操作
}
3.[[NSNotificationCenter defaultCenter] removeObserver:self];//移除监听
通过这种操作,只有一种可能会分享不成功也调用成功回调---用户既不选择留在微信也不返回程序,而是直接在跳转到微信后直接关掉微信,当然我只能默认用户不会做这种小概率操作了