2012-10-13 74 views
0

我正在製作一個具有多個用例的應用程序。它具有主要功能(通過按應用程序圖標激活),然後是由自定義URL方案激活的主要功能的其他子集。自定義應用程序行爲的URL模式

爲了解釋我的問題,我應該解釋我目前如何告訴我的應用程序行爲不同。

我已經使用: - (BOOL)應用中:didFinishLaunchingWithOptions:

從選項抓取的網址: [launchOptions objectForKey:[keyArray objectAtIndex:0]]

現在我解析urlString並抓住我的所有launchType參數,把它們放在NSUserDefaults中。然後我等待我的啓動畫面出現,然後它會告訴我的應用程序如何表現。

起初這看起來不錯,但後來我意識到:如果我深入鏈接到應用程序,並且提供了功能B,那麼應用程序會進入後臺,下次應用程序進入前臺時(no它會顯示功能B.

我想知道如果有人對標準實踐有一個想法,人們通常使用什麼方法?

僅供參考, 我將試圖告訴我的navigationcontroller到popToRootViewController,當 來解決這個問題 - (BOOL)應用:應用handleOpenURL: 叫,除非didFinishLaunchingWithOptions之前的叫法,在這種情況下,只是做我以前實施的。

回答

2

這聽起來像是有幾件事讓你考慮這種方法。

首先看看UIApplicationDelegate文檔。 -application:willFinishLaunchingWithOptions:警告:

如果您的應用程序推出打開一個URL,你應該檢查UIApplicationLaunchOptionsURLKey鍵的值 並返回指示您的應用程序是否能夠真正打開URL一個布爾值 。您不應該嘗試使用此方法打開網址 。相反,在您的應用 委託中實施 應用程序:openURL:sourceApplication:annotation:方法並使用該方法打開URL。

看着-application:openURL:sourceApplication:annotation:我們看到:

如果您的應用程序,還需要發起打開URL,應用程序調用的 應用:willFinishLaunchingWithOptions:和 應用中:didFinishLaunchingWithOptions:方法第一,其次是 這種方法。這些方法的返回值可用於防止調用此方法。 (如果應用程序已經在運行, 只有這個方法被調用。

其次,它聽起來就像你正在使用NSUserDefaults永久存儲應該是什麼臨時狀態(如果應用程序是通過一個URL啓動或不)。你有沒有重置你在那裏設置的值,或者通過一個URL啓動應用程序,一旦它永遠停留在那個路徑上。

最後用戶有合理的期望,應用程序將從他們離開的地方恢復。用戶將離開您的應用程序,以迴應電話,短信,通知,外部干擾,其他應用程序的需求以及任何其他原因。拒絕讓他們返回到他們離開的地方時,他們恢復/重新啓動應用程序(不通過網址)可能會產生糟糕的用戶體驗。

相關問題