2015-10-12 87 views
1

SFSafariViewController允許網頁訪問存儲在Safari中的cookie。我想用SFSafariViewController執行一些後臺任務來利用cookie。但是我不希望用戶看到SFSafariViewController。如何隱藏SFSafariViewController?

有沒有辦法隱藏SFSafariViewController並允許用戶在顯示SFSafariViewController時觸摸屏幕?

回答

2
Class SFSafariViewControllerClass = NSClassFromString(@"SFSafariViewController"); 
if (SFSafariViewControllerClass) { 
    id safController = [[SFSafariViewControllerClass alloc] initWithURL:[NSURL URLWithString:urlString]]; 

    UIViewController *windowRootController = [[UIViewController alloc] init]; 

    self.secondWindow = [[UIWindow alloc] initWithFrame:CGRectZero]; 
    self.secondWindow.rootViewController = windowRootController; 
    [self.secondWindow makeKeyAndVisible]; 
    [self.secondWindow setAlpha:0]; 

    [windowRootController presentViewController:safController animated:YES completion:^{ 
     [self.secondWindow.rootViewController dismissViewControllerAnimated:NO completion:NULL]; 
    }]; 
} 

您可以使用代碼隱藏SFSafariViewControllerClass

+0

這對我有效,謝謝! – hungbm06

+1

將alpha設置爲零不再適用於iOS 10.您可以將主窗口window.windowLevel設置爲較高的數字,然後將其設置回0. – Brian

+0

@Away Lin在提交時遇到了任何拒絕您的應用程序的情況?我在問這個問題,因爲在答案中使用SFSafariViewControllerClass會違反第二個答案中指出的法律問題 –

2

如果你打算提交到App Store不要這樣做。

https://developer.apple.com/app-store/review/guidelines/

5.1.1(ⅳ)SafariViewContoller必須用於可視地向用戶提供信息;控制器可能不會被其他視圖或圖層隱藏或遮擋。此外,應用程序可能不會使用 SafariViewController來跟蹤用戶,而他們不知情並且 同意。

如果您需要訪問cookie,請改爲使用WKWebView。請參閱Getting all cookies from WKWebView。不過,這些cookie不會與Safari共享。