2014-01-06 145 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