#import <SafariServices/SafariServices.h>
项目中使用到SFSafariViewController,基本都是为了获取safari的数据交互,比如推广链接url里面的uid等信息。
ios10开始新增要求:不允许隐藏、透明度不得低于0.05、不允许设置view大小为CGSizeZero,不能移出屏幕外,但是可以放在某个自己的view的下面
@interface ViewController ()<SFSafariViewControllerDelegate>
@property (nonatomic , strong) SFSafariViewController *safariView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//SFSafariViewController只能在init时候传入url,不可以跳转
self.safariView = [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString:@"https://jifenkoudai.com/html5/1.html"]];
self.safariView.delegate = self;
self.safariView.view.backgroundColor = [UIColor whiteColor];
//不允许隐藏、透明度不得低于0.05、不允许设置view为CGSizeZero,不能移出屏幕外,但是可以放在某个view的底部
self.safariView.view.alpha = 0.05;
self.safariView.view.frame = CGRectMake(0.0, 0.0, 0.5, 0.5);
[self.view insertSubview:self.safariView.view atIndex:0];
//必须手动调用addChildViewController和didMoveToParentViewController
[self addChildViewController:self.safariView];
[self.safariView didMoveToParentViewController:self];
}
//加载完成之后调用
- (void)safariViewController:(SFSafariViewController *)controller didCompleteInitialLoad:(BOOL)didLoadSuccessfully
{
if(didLoadSuccessfully){
[self.safariView willMoveToParentViewController:nil];
[self.safariView.view removeFromSuperview];
[self.safariView removeFromParentViewController];
}
}
@end
整体逻辑:
1.老用户推荐新用户,生成带uid的专属链接 (http://www.aaa.com/invite.html?uid=888)
2.新用户打开url,safari记录uid到本地存储 (uid=888)
3.新用户下载app
4.新用户打开app,app访问推荐地址同域名下的url(http://www.aaa.com/index.html),此链接只干一件事:读取本地存储数据,拼接schemes和key,value, schemes://key=vlaue&key1=value1&...,js设置location.href=拼接的schemes,会自动通讯传给app
<script>
location.href = "xianpaozc://uid=888";
</script>
5.app内部在-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options 方法获取url,解析参数
6.获取参数后,绑定新老用户关系。
网友评论