2017-06-22 122 views
11

後編程方式發送用戶設置屏幕,有一個後端到應用程序按鈕,在左上角:返回到應用程序按鈕處理程序

enter image description here

點擊此按鈕,使用戶回到我的應用程序。然而,在這一點上應用程序調用其委託與當我們從後臺返回正在調用的方法相同:

applicationWillEnterForeground

applicationDidBecomeActive

同時,我需要區分是否用戶通過點擊這個特定的「回到應用程序」按鈕回到應用程序,或通過以任何其他方式發送到後臺後簡單地進入應用程序來回到應用程序。這是否有可能?

+0

看到https://stackoverflow.com/questions/13447101/bring-previous-app-back-to-the-front-when-user-is-done-with-my-ios -app – Burnie777

+1

如果您是「以編程方式將用戶發送到設置屏幕」,那麼您是否可以在應用程序之前簡單地設置一個標誌?然後在'applicationDidBecomeActive'中檢查。 – dfd

+0

@dfd用戶可以隨時離開設置並在任何時候回到應用程序。然後該標誌仍然設置爲true,而它不應該是 – user3581248

回答

3

我相信,默認情況下是無法區分的。

我的建議是,如果您正在關注特定設置條目更改,請將新設置的值與applicationDidBecomeActive中的舊設置值進行比較。如果有變化,那麼你可以區分流量。但是,如果沒有改變,你不能。

+0

不幸的是,這個解決方案不適合我,因爲我發送用戶自動鎖定設置,並且從我所知的那些,無法從代碼讀取... – user3581248

2

你是否開發了兩個你想要連接的應用程序?

有更爲方式離開你的應用程序,然後你描述:

  1. 用戶點擊home鍵一次
  2. 用戶點擊home鍵兩次
  3. 用戶按下電源按鈕,而應用程序仍處於前景
  4. 在支持3D觸摸的設備上,用戶在前沿進行3D觸摸。
  5. 用戶使用「回到應用程序」您所描述的事情
  6. 用戶得到通知,並挑選-POP它
  7. 用戶轉到其他應用程序的通知
  8. 用戶打開通知中心,並做動作有
  9. 用戶打開控制中心並在那裏執行一些操作
  10. 用戶在您的應用程序內部使用共享功能或超鏈接可觸發其他應用程序。

我可能會錯過某些東西,但是我創建的這個列表有利於顯示,區分這個動作可能非常困難。即使你處理其中一個動作也不一定處理所有其他動作。

如果您會告訴更多關於您遇到的用例或您正在嘗試解決的問題,將會對您有所幫助。

+0

應用程序的要求我開發包括允許用戶更改自動鎖定時間的流程(它最初是在Android上開發的,顯然您可以通過代碼實現此目的)。顯然,沒有任何選擇可以像在Android上那樣完成此任務,所以我的想法是以編程方式將用戶發送到設置屏幕。但還有另一個要求 - 每當我們回到應用程序,我們應該回到開始屏幕,因爲其他屏幕可能包含機密數據。但在上面描述的場景中,我想回到起始屏幕,而不是回到應用程序設置的屏幕。 – user3581248

+1

在這種情況下,您可以在用戶移至設置屏幕之前將用戶移至開始屏幕。這樣你就可以實現你的目標。 –

+0

@JayeshSojitra評論+1。 user381248 - Android *端口*絕不是100%。更糟的是,至少對我(也可能是其他人)來說,是你從來沒有把這種類型的細節放在你的問題中。請,這屬於你的問題的一部分! (不是Android的一部分 - 可以提供幫助 - 但需要在將iOS用戶發送到設置後返回主屏幕*這非常重要。) – dfd

1

我建議解決類似問題檢測不同的啓動選項(我們的應用程序是如何在活動狀態(運行))

斯威夫特2相關的一個通用的解決方案。3

在AppDelegate中

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

if let options = launchOptions{ 

print(options.description) 

//These options will give the difference between launching from background or from pressing the back button 

if (launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] != nil) { 

//this indicates the app is launched by pressing Push notifications 
}else if (launchOptions?[UIApplicationLaunchOptionsLocalNotificationKey] != nil) { 

//This indicates the app is launched on tapping the local notifications 

}else if (launchOptions?[UIApplicationLaunchOptionsSourceApplicationKey] != nil){ 

//This indicates the App launched from a valid source e.g: on tap of Open App from App Store when your App is installed or directly from home screen 

} 
} 

} 

參考: 蘋果文檔提供所有這些可以通過添加被檢測

https://developer.apple.com/documentation/uikit/uiapplicationdelegate/launch_options_keys

使用的委託協議方法電源可用的啓動選項觀察員

https://developer.apple.com/documentation/uikit/uiapplicationdelegate

斯威夫特3等效:

//adding observer 

     NotificationCenter.default.addObserver(self, 
      selector: #selector(applicationDidBecomeActive), 
      name: .UIApplicationDidBecomeActive, 
      object: nil) 

//removing observer 

     NotificationCenter.default.removeObserver(self, 
      name: .UIApplicationDidBecomeActive, 
      object: nil) 

// callback 

     func applicationDidBecomeActive() { 
      // handle event 
     } 

類似的問題在計算器其中我幫你出:

Detect when "back to app" is pressed

How to detect user returned to your app in iOS 9 new back link feature?

Detect if the app was launched/opened from a push notification

Checking launchOptions in Swift 3