2014-01-06 48 views
2

我試圖實現使用xamarin + mvvmcross深層鏈接能力,MvvmCross +深層鏈接

深聯在任的plist配置/清單已經完成,工作。我想要的是,當我的應用程序正在運行或不,我想我的主視圖模型來處理它的InitFromBundleIMvxBundle bundle)深度鏈接發送的參數方法(我的主視圖模型在應用程序運行時總是處於活動狀態)。

雖然Android中它很容易被覆蓋在閃屏活動TriggerFirstNavigate並重寫IMvxAppStart Start方法來實現,我心中已經通過mvvmcross源去看看它是如何在Xamarin.iOS完成,仍然沒有運氣。

當我的iOS應用程序是由深層鏈接打開,InitFromBundleIMvxBundle bundle)方法做處理網址參數,但是當我在深層鏈接點擊,而我的應用程序是活的,它把應用推到前面,但不打電話給InitFromBundle方法。

我所做的已經是它是如何工作的蘋果開發人員的檢查,可以看出here

我的情況下,可以在圖6-2在上面的鏈接中可以看出。

回答

2

這只是一個猜測,但基於文檔我會想象你需要覆蓋appdelegate.cs中的HandleOpenURL。然後,您可能想要使用Messenger來提醒您的應用程序已經請求了新的URL,或者按照此處的答案到navigate to a view model from a view

例如

public override bool HandleOpenURL (UIApplication application, NSUrl url) 
{ 
    if (url != null) 
    { 
     //do navigation or message notification here 
     return true; 
    } 
    else 
     return false; 
} 
+0

我已經通過重寫OpenUrl方法來嘗試該方法。 在android中,例如,當點擊深層鏈接意圖url導致視圖重新創建,因此初始化視圖模型,在iOS中,因爲我瞭解該視圖不會被重新創建,那就是我在尋找 在ViewModel中使用InitFromBundle(IMvxBundle bundle)方法進行viewmodel初始化的正確位置(這是否合理?)。 – Kobynet

+1

@羅斯的回答對我來說很好。當我這樣做時,我通常會攔截「open url」,然後將應用程序導航到新的「ViewModel」。如果你想在現有的'ViewModel'中執行一些處理,那麼你可能只需要發送一個'Message'或者直接調用一個方法。 – Stuart