Xamarin.iOS - Глубокая ссылка не работает, когда приложение закрыто - PullRequest
0 голосов
/ 29 мая 2018

Я не понимаю, диплинк работает нормально, когда приложение находится в фоновом режиме, но когда оно закрыто, приложение просто запускается и ничего не происходит .. Кроме того, так как приложение сначала закрывается, я не могу отладитьэто (по крайней мере, я не знаю, как это сделать).

У вас есть идеи, почему это не работает?

Best,

Макс

1 Ответ

0 голосов
/ 29 мая 2018

Итак, я наконец узнал через некоторое время

На самом деле тот факт, что OpenUrl не вызывается, когда приложение еще не запущено, является довольно логичным.

Пример: my_app://query?id=azerty

  • Приложение уже в фоновом режиме # запущено

    • Будет получено OpenUrl(UIApplication app, NSUrl url, NSDictionary options)вызывается и в url вы можете узнать, по какой ссылке запущено приложение.
  • Приложение не работает в фоновом режиме # not_launched

    • На самом деле FinishedLaunching(UIApplication application, NSDictionary launchOptions) будет иметь параметр url в launchOptions.Ключ UIApplicationLaunchOptionsURLKey - это тот, который вы ищете.

Пример кода:

public class AppDelegate : UIApplicationDelegate
{
    public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
    {
        /* ... */

        if (launchOptions != null && launchOptions.Count > 0)
        {
            try
            {
                var url = launchOptions["UIApplicationLaunchOptionsURLKey"] as NSUrl;
                var result = AppDeepLinksEntry(url);
            }
            catch (Exception ex) { /* ... */ }
        }

        /* ... */
    }

    #region OpenUrl

    public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
    {
        return AppDeepLinksEntry(url);
    }

    public override bool OpenUrl(UIApplication application, NSUrl url, string sourceApplication, NSObject annotation)
    {
        return AppDeepLinksEntry(url);
    }

    #endregion OpenUrl

    private bool AppDeepLinksEntry(NSUrl url)
    {
        Debug.WriteLine($"OpenUrl Url : {url}");
        Debug.WriteLine($"OpenUrl Url Query: {url.Query}");
        Debug.WriteLine($"OpenUrl Url Host: {url.Host}");
        Debug.WriteLine($"OpenUrl Url Path: {url.Path}");

        return true;
    }
}

Я надеюсь, что объяснение и пример кодавыше поможет вам понять и / или решить ваши будущие проблемы!

Макс

...