[Xamarin Forms App Linking using parameters

问题描述 投票:0回答:1

我有一个问题。我想从我的php页面启动我的应用,并通过该链接传递变量。然后,在我的应用程序站点上,我需要读取参数并使用该参数执行所需的操作。现在我已经找到此链接:Xamarin Android Start app using link with parameters。这个人用Xamarin.Android来做。但是我该如何在Xamarin.Forms中执行此操作,或者类似?

c# xamarin xamarin.forms xamarin.android xamarin.ios
1个回答
0
投票

我将通过使用以下网址作为示例,向您展示如何做到这一点:https://xamboy.com/hello/Rendy

  • xamboy.com:与应用链接关联的域
  • hello:是应用程序链接路径
  • Rendy:参数

首先,您需要为每个平台配置应用程序链接支持。通过执行以下步骤:

Apple门户配置

  1. 转到应用程序ID部分,然后单击您的应用程序

enter image description here

  1. 在“应用程序服务”列表中,滚动到底部,然后单击“编辑”>
  2. enter image description here

  1. 启用关联域并保存。
  2. enter image description here

网站配置

为了验证与应用程序的域关联,必须在定义该关联的网站上上传文件。

需要创建一个名为apple-app-site-association的文件。该文件应包含以下json结构:

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "CNAL8C4H5U.com.crossgeeks.applinkssample",
                "paths": [ "/hello/*"]
            }
        ]
    }
}

示例:https://www.xamboy.com/.well-known/apple-app-site-association

此文件应放置在.well-known文件夹中或网站的根目录(https://yourdomain/.well-known/apple-app-site-association)。

  • appID是前缀+(。)+ ID的组合enter image description here

  • Paths是我们的应用程序将在URL上显示的所有路径的定义。例如,在我们的例子中是https://xamboy.com/hello,因为我们只是将/ hello定义为apple-app-site-association文件中的路径。

  • apple-app-site-association文件不应具有文件扩展名
  • Android配置

需要创建一个名为assetlinks.json的数字资产文件。这里有一个在线工具可以帮助您创建和测试此文件:https://developers.google.com/digital-asset-links/tools/generator

它应包含以下json结构:

[
   {
      "relation":[
         "delegate_permission/common.handle_all_urls"
      ],
      "target":{
         "namespace":"android_app",
         "package_name":"com.crossgeeks.applinkssample",
         "sha256_cert_fingerprints":[
            "3E:5D:E5:3B:BC:5A:61:BC:9E:96:34:C7:C2:D6:9F:BB:32:3C:8E:C5:FD:CE:D2:76:4C:81:98:2F:41:12:15:DD"
         ]
      }
   }
]

示例:https://www.xamboy.com/.well-known/assetlinks.json

该文件应放置在网站的[.C。知名文件夹(https://yourdomain/.well-known/assetlinks.json)中。

如果您要测试一切正常,可以使用以下网址:

https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site= https://:&relation = delegate_permission / common.handle_all_urls

如果一切正常,则应类似于以下内容:

enter image description here

在移动项目中配置应用程序链接

iOS项目

转到Entitlements.plist文件,启用属性Associated Domain并添加格式为applinks:yourdomain.com和applinks:*。yourdomain.com的网站域

enter image description here

Android项目

通过在每个要支持的域/路径/协议中添加一个IntentFilter,在Android MainActivity上配置应用程序链接。

[Activity(Label = "AppLinksSample", Icon = "@mipmap/icon", Theme = "@style/MainTheme",
              MainLauncher = true,  
              ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]

    //Invite App Link
    [IntentFilter(new[] { Android.Content.Intent.ActionView },
                  DataScheme = "https",
                  DataHost = "xamboy.com",
                  DataPathPrefix = "/hello",
                  AutoVerify =true,
                  Categories = new[] { Android.Content.Intent.CategoryDefault, Android.Content.Intent.CategoryBrowsable })]
    [IntentFilter(new[] { Android.Content.Intent.ActionView },
                  DataScheme = "http",
                  DataHost = "xamboy.com",
                  AutoVerify = true,
                  DataPathPrefix = "/hello",
                  Categories = new[] { Android.Content.Intent.CategoryDefault, Android.Content.Intent.CategoryBrowsable })]

    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());
        }

        protected override void OnNewIntent(Intent intent)
        {
            base.OnNewIntent(intent);
        }
    }

表单项目

在App.cs文件中,重写OnAppLinkRequestReceived方法。在这里,您可以处理通过应用程序链接打开应用程序并处理参数时发生的情况:

 protected override void OnAppLinkRequestReceived(Uri uri)
 {
      if (uri.Host.EndsWith("xamboy.com", StringComparison.OrdinalIgnoreCase))
      {

                if (uri.Segments != null && uri.Segments.Length == 3)
                {
                    var action = uri.Segments[1].Replace("/", "");
                    var msg = uri.Segments[2];

                    switch (action)
                    {
                        case "hello":
                            if(!string.IsNullOrEmpty(msg)){
                                Device.BeginInvokeOnMainThread(async() =>
                                {
                                    await Current.MainPage.DisplayAlert("hello", msg.Replace("&", " "), "ok");
                                });
                            }

                            break;

                        default:
                            Xamarin.Forms.Device.OpenUri(uri);
                            break;
                    }
                }
     }
}

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.