Я пытаюсь настроить глубокие/универсальные ссылки для своего приложения .NET MAUI. На первый взгляд все настроено согласно документации MS, однако при доступе к ссылкам он просто использует браузер. Это происходит как в Android, так и в Google.
Желаемое поведение – чтобы любой трафик на https://app.rackemapp.com (обычно через QR-код) ) вызовет открытие приложения.
В Android я протестировал его с помощью специальной схемыrackemapp://, которая сработала, поэтому я знаю, что базовая логика работает, я просто не могу заставить устройства понять, что трафик app.rackemapp.com должен открыть app.
Тестирование скручивания для доступа к моему файлу AASA работает нормально (без перенаправлений или ошибок 40x), а инструмент диагностики на устройстве обнаруживает его как действительную универсальную ссылку.Как мне открыть мое приложение?
MauiProgram.cs
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp()
.UseMauiCommunityToolkit()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("bootstrap-icons.ttf", "Bootstrap");
})
.ConfigureLifecycleEvents(lifecycle =>
{
#if IOS
lifecycle.AddiOS(ios =>
{
// Universal link delivered to FinishedLaunching after app launch.
ios.FinishedLaunching((app, data) => HandleAppLink(app.UserActivity));
// Universal link delivered to ContinueUserActivity when the app is running or suspended.
ios.ContinueUserActivity((app, userActivity, handler) => HandleAppLink(userActivity));
// Only required if using Scenes for multi-window support.
if (OperatingSystem.IsIOSVersionAtLeast(13) || OperatingSystem.IsMacCatalystVersionAtLeast(13))
{
// Universal link delivered to SceneWillConnect after app launch
ios.SceneWillConnect((scene, sceneSession, sceneConnectionOptions)
=> HandleAppLink(sceneConnectionOptions.UserActivities.ToArray()
.FirstOrDefault(a => a.ActivityType == Foundation.NSUserActivityType.BrowsingWeb)));
// Universal link delivered to SceneContinueUserActivity when the app is running or suspended
ios.SceneContinueUserActivity((scene, userActivity) => HandleAppLink(userActivity));
}
});
#endif
#if ANDROID
lifecycle.AddAndroid(android =>
{
android.OnCreate((activity, bundle) =>
{
var action = activity.Intent?.Action;
var data = activity.Intent?.Data?.ToString();
if (action == Android.Content.Intent.ActionView && data is not null)
{
Task.Run(() => HandleAppLink(data));
}
});
});
#endif
});
//Unnecessary code omitted
var app = builder.Build();
ServiceHelper.Initialize(app.Services);
return app;
}
#if IOS
static bool HandleAppLink(Foundation.NSUserActivity? userActivity)
{
if (userActivity is not null && userActivity.ActivityType == Foundation.NSUserActivityType.BrowsingWeb && userActivity.WebPageUrl is not null)
{
HandleAppLink(userActivity.WebPageUrl.ToString());
return true;
}
return false;
}
#endif
static void HandleAppLink(string url)
{
if (Uri.TryCreate(url, UriKind.RelativeOrAbsolute, out var uri))
App.Current?.SendOnAppLinkRequestReceived(uri);
}
App.xaml.cs
public App()
{
InitializeComponent();
MainPage = new MainPage();
}
protected override async void OnAppLinkRequestReceived(Uri uri)
{
base.OnAppLinkRequestReceived(uri);
var theurl = uri.ToString();
// Show an alert to test that the app link was received.
await Dispatcher.DispatchAsync(async () =>
{
//await Windows[0].Page!.DisplayAlert("App link received", uri.ToString(), "OK");
var encodedString = theurl.Split("/")[4];
byte[] data = Convert.FromBase64String(encodedString);
string decodedString = System.Text.Encoding.UTF8.GetString(data);
var api = "https://mobileapi.rackemapp.com";
#if DEBUG
api = "https://g7c7crrc-44357.uks1.devtunnels.ms";
#endif
var client = new RestClient(api);
var request = new RestRequest("/mobile/getmatchfromtable/" + decodedString, Method.Get);
var execute = client.Execute(request);
string rawResponse = execute.Content;
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var response = new TableMatchResponse();
if (rawResponse == null || rawResponse == "")
{
response.MatchCode = "OFFLINE";
}
else
{
response = System.Text.Json.JsonSerializer.Deserialize(rawResponse, options);
}
if (response.MatchCode == null || response.MatchCode == "")
{
// error condition
}
else
{
App.Current.MainPage.Navigation.PushModalAsync(new Scoreboard(response.MatchCode));
}
});
}
свернуть в AASA
curl -v https://app.rackemapp.com/.well-known/a ... ssociation
* Host app.rackemapp.com:443 was resolved.
* IPv6: (none)
* IPv4: 104.21.50.101, 172.67.204.183
* Trying 104.21.50.101:443...
* Connected to app.rackemapp.com (104.21.50.101) port 443
* ALPN: curl offers h2,http/1.1
* (304) (OUT), TLS handshake, Client hello (1):
* CAfile: /etc/ssl/cert.pem
* CApath: none
* (304) (IN), TLS handshake, Server hello (2):
* (304) (IN), TLS handshake, Unknown (8):
* (304) (IN), TLS handshake, Certificate (11):
* (304) (IN), TLS handshake, CERT verify (15):
* (304) (IN), TLS handshake, Finished (20):
* (304) (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / AEAD-AES256-GCM-SHA384 / [blank] / UNDEF
* ALPN: server accepted h2
* Server certificate:
* subject: CN=rackemapp.com
* start date: Dec 27 10:10:42 2024 GMT
* expire date: Mar 27 11:08:16 2025 GMT
* subjectAltName: host "app.rackemapp.com" matched cert's "*.rackemapp.com"
* issuer: C=US; O=Google Trust Services; CN=WE1
* SSL certificate verify ok.
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://app.rackemapp.com/.well-known/a ... ssociation
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: app.rackemapp.com]
* [HTTP/2] [1] [:path: /.well-known/apple-app-site-association]
* [HTTP/2] [1] [user-agent: curl/8.7.1]
* [HTTP/2] [1] [accept: */*]
> GET /.well-known/apple-app-site-association HTTP/2
> Host: app.rackemapp.com
> User-Agent: curl/8.7.1
> Accept: */*
>
* Request completely sent off
< HTTP/2 200
< date: Sat, 28 Dec 2024 21:57:37 GMT
< content-type: application/json
< content-length: 315
< last-modified: Tue, 24 Dec 2024 22:39:41 GMT
< accept-ranges: bytes
< etag: "589c11b95456db1:0"
< x-powered-by: ASP.NET
< cf-cache-status: DYNAMIC
< report-to: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v4?s=oe3dB4x1fALVNQ6f%2FDzDNWMBUj772yNTdc7RsseLGWDPbOWJ4hgLRn3%2FitA%2BY4vBR4KN5juDa4x9wxu9z0CGbK4jXP5m0n6f0VTyKamvPIGlvEJl6VobT6dMJOdHMuiCqkMtMA%3D%3D"}],"group":"cf-nel","max_age":604800}
< nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
< strict-transport-security: max-age=0; includeSubDomains; preload
< x-content-type-options: nosniff
< x-cloudflare-enabled: true
< server: cloudflare
< cf-ray: 8f94ce9b09d271f2-LHR
< alt-svc: h3=":443"; ma=86400
< server-timing: cfL4;desc="?proto=TCP&rtt=41458&min_rtt=36685&rtt_var=18592&sent=5&recv=9&lost=0&retrans=0&sent_bytes=2911&recv_bytes=585&delivery_rate=50756&cwnd=227&unsent_bytes=0&cid=15096d52c33a80ae&ts=100&x=0"
<
{
"activitycontinuation": {
"apps": [ "[Teamid].com.rackemapp.mobileapp" ]
},
"applinks": {
"apps": [],
"details": [
{
"appID": "[Teamid].com.rackemapp.mobileapp",
"paths": [ "*", "/*" ]
}
]
}
* Connection #0 to host app.rackemapp.com left intact
Подробнее здесь: https://stackoverflow.com/questions/793 ... ng-browser
Ссылки на приложения .NET MAUI не открывают приложение, вместо этого открывается браузер ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Ссылки на приложения .NET MAUI не открывают приложение, вместо этого открывается браузер
Anonymous » » в форуме Android - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Ссылки на приложения .NET MAUI не открывают приложение, вместо этого открывается браузер
Anonymous » » в форуме IOS - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Ссылки на приложения .NET MAUI не открывают приложение, вместо этого открывается браузер
Anonymous » » в форуме IOS - 0 Ответы
- 23 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Ссылки на приложения .NET MAUI не открывают приложение, вместо этого открывается браузер
Anonymous » » в форуме Android - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Ссылки на приложения .NET MAUI не открывают приложение, вместо этого открывается браузер
Anonymous » » в форуме IOS - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-