1

我的應用程序使用在不同的屏幕上:當我在自己的應用程序中調用openURL時,如何使用通用鏈接?

[[UIApplication sharedApplication] openURL:url]; 

爲了打開網址從我的web服務接收。 有時,這些URL與我的項目無關,所以打開它們到Safari即可。其他人,這些URL屬於我自己的,就像產品的細節。那些可以通過我的應用程序使用通用鏈接打開並轉到正確的屏幕,但這不會發生。

閱讀蘋果文檔我看到了這一點: 「來理解,如果你的應用程序使用的OpenURL是很重要的:打開一個通用的鏈接到你的網站,鏈接在你的應用程序不打開在這種情況下,iOS的承認該呼叫源自您的應用,因此不應該被您的應用處理爲通用鏈接。「 https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html

這種行爲讓我感到困惑。我如何使用openURL嘗試在應用程序中處理第一個URL,而不是直接進入Safari?

我發現了一個快速/髒的解決方法。刪除openURL並在每次我的應用使用openURL時使用:

NSUserActivity * userActivity = [[NSUserActivity alloc] initWithActivityType:NSUserActivityTypeBrowsingWeb]; userActivity.webpageURL = url; [[UIApplication sharedApplication] .delegate application:[UIApplication sharedApplication] continueUserActivity:userActivity restorationHandler:nil];

請注意,我的appdelegate應用程序:continueUserActivity:restorationHandler:將轉發到openURL在我的應用程序中沒有特定屏幕的任何URL,因此它工作得很好,但我覺得這是一個糟糕的解決方案。 你有什麼想法或建議嗎?

+0

你能解釋一下更詳細嗎?您需要處理一些網址並在您的應用中打開它,並跳過一些鏈接並在Safari中打開它? –

回答

2

您的解決方案看起來很合理。爲什麼這很可怕?

也許你可以實現更好看的解決方案,如獨立類LinkHandler。該類可以識別鏈接是否可以由您的應用程序處理(比使用應用程序的處理)。否則,課程將通過此鏈接到iOS處理[UIApplication openURL:]

很多應用程序都在這樣做,想象一下Google+或Facebook iOS應用程序如何處理這些社交網絡中發佈的鏈接。

+0

感謝您的回覆。你知道使用類似這樣的具體例子嗎?謝謝。 – Ricardo

+1

一個重要注意事項:NSUserActivity/NSUserActivityTypeBrowsingWeb僅處理http和https URL。如果你點擊一個鏈接像mailto:...那麼應用程序崩潰,所以在這種情況下重定向到openURL和問題修復。 – Ricardo

相關問題