我有一个问题。我想从我的php页面启动我的应用,并通过该链接传递变量。然后,在我的应用程序站点上,我需要读取参数并使用该参数执行所需的操作。现在我已经找到此链接:Xamarin Android Start app using link with parameters。这个人用Xamarin.Android
来做。但是我该如何在Xamarin.Forms
中执行此操作,或者类似?
我将通过使用以下网址作为示例,向您展示如何做到这一点:https://xamboy.com/hello/Rendy
首先,您需要为每个平台配置应用程序链接支持。通过执行以下步骤:
为了验证与应用程序的域关联,必须在定义该关联的网站上上传文件。
需要创建一个名为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)。
Paths是我们的应用程序将在URL上显示的所有路径的定义。例如,在我们的例子中是https://xamboy.com/hello,因为我们只是将/ hello定义为apple-app-site-association文件中的路径。
需要创建一个名为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"
]
}
}
]
该文件应放置在网站的[.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
如果一切正常,则应类似于以下内容:
转到Entitlements.plist文件,启用属性Associated Domain并添加格式为applinks:yourdomain.com和applinks:*。yourdomain.com的网站域
通过在每个要支持的域/路径/协议中添加一个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;
}
}
}
}