【问题标题】:MvvmCross + Deep LinkingMvvmCross + 深度链接
【发布时间】:2014-01-23 15:41:56
【问题描述】:

我正在尝试使用xamarin + mvvmcross 实现深度链接能力,

plist/manifest 中的深度链接配置已经完成并正在工作。

我想要实现的是,无论我的应用程序是否正在运行,我都希望我的主视图模型能够在其 InitFromBundle (IMvxBundle bundle) 方法中处理由深层链接发送的参数(我的主视图模型在应用程序运行时始终处于活动状态)。

虽然在 android 中通过覆盖初始屏幕活动中的 TriggerFirstNavigate 并覆盖 IMvxAppStart Start 方法很容易实现,但我已经通过 mvvmcross 源查看它是如何在 Xamarin.iOS 中完成的仍然没有运气。

当我的 ios 应用程序从深层链接打开时,InitFromBundle (IMvxBundle bundle) 方法确实会处理 url 参数,但是当我在我的应用程序处于活动状态时单击深层链接时,它会将应用程序带到前面但不调用InitFromBundle方法。

我已经做的是向苹果开发人员询问它是如何工作的,可以看到here

我的案例可以在上面链接中的图6-2中看到。

【问题讨论】:

    标签: android ios xamarin mvvmcross


    【解决方案1】:

    这只是一个猜测,但根据我想你需要覆盖 appdelegate.cs 中的HandleOpenURL 的文档。然后,您可能想要使用信使来提醒您的应用程序已请求新的 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;
    }
    

    【讨论】:

    • 我已经通过覆盖 OpenUrl 方法尝试了该方法。例如,在 android 中,当单击深层链接意图 url 导致重新创建视图并因此初始化视图模型时,在 iOS 中,据我所知,视图没有重新创建,这就是我正在寻找正确位置的地方在 ViewModel 中使用 InitFromBundle (IMvxBundle bundle) 方法进行视图模型初始化(这有意义吗?)。
    • @Ross 的回答对我来说看起来不错。完成此操作后,我通常会拦截“打开 url”,然后将应用程序导航到新的 ViewModel。如果您想在现有显示的ViewModel 中执行一些处理,那么您可能只需要向它发送Message 或直接调用它的方法。
    猜你喜欢
    • 2014-09-04
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 2016-10-22
    • 2014-07-28
    • 2014-05-17
    • 2021-05-30
    相关资源
    最近更新 更多