Связь между двумя приложениями на одном устройстве iOS / Android с Xamarin

В настоящее время мы разрабатываем приложение, которое является своего рода добавочным приложением для нашего основного приложения, которое расширяет его возможности.

Мы спросили себя, есть ли простая связь между приложениями на одном устройстве (ничего не найдено в Интернете для этого …). Наша первая мысль заключалась в создании серверного сокета в нашем дополнительном приложении и отправке данных из основного приложения.

Вот код C # для сервера:

public async Task Start() { Listener = new TcpListener(IPAddress.Parse(GetIP()), 7777); var client = Listener.AcceptTcpClient(); while (true) { while (!client.GetStream().DataAvailable) ; using (NetworkStream stream = client.GetStream()) { byte[] data = new byte[client.Available]; stream.Read(data, 0, client.Available); if (data.Length > 0) { String s = Encoding.UTF8.GetString(data); if (!string.IsNullOrWhiteSpace(s)) OnMessageRecevied?.Invoke(s); } } } } 

А для клиента:

  public async Task SendMessage(string msg) { tClient = new TcpClient(); var buffer = Encoding.UTF8.GetBytes(msg); while (!tClient.Connected) { tClient.Connect(IPAddress.Parse(Server.GetIP()), 7777); Thread.Sleep(100); } await tClient.GetStream().WriteAsync(buffer, 0, buffer.Length); tClient.Close(); } 

Кажется, что это не работает, потому что основное внимание в нашем приложении уделяется, добавление приложения похоже на прекращение прослушивания.

Это общий способ общения между этими двумя приложениями (всегда на одном устройстве) или нам нужно разработать отдельное решение? Если отдельные решения, какое лучшее решение для iOS? Android? Мы использовали Xamarin для нашего дополнительного приложения, и в настоящее время мы ориентируемся только на iOS и Android.

Примечание: поскольку это одно и то же устройство, мы не хотим использовать удаленный веб-сервис для связи.

Solutions Collecting From Web of "Связь между двумя приложениями на одном устройстве iOS / Android с Xamarin"

После многих поисков кажется, что единственным «кросс-платформенным» решением является Url Scheme.

Для iOS: https://developer.xamarin.com/recipes/cross-platform/app-links/app-links-ios/

Для Android: https://developer.xamarin.com/recipes/cross-platform/app-links/app-links-android/

Похоже, что Android может обрабатывать 1Mb данных, которые должны быть переданы с намерением, и iOS может обрабатывать столько, сколько позволяет системная память в URL. Мы будем base64url кодировать данные, чтобы передать их для iOS и добавить его в качестве base64 в массив extraString для Android.

Нам придется создать Android Activity и iOS ViewController для обработки вызовов Url, поэтому это зависит от платформы, но основной интеллект можно разделить между платформами.

Делая это, нашему добавочному приложению не нужно будет расширять приложение iOS и иметь собственный интерфейс и экраны.