Aktualnie tworzymy aplikację, która jest rodzajem "dodatkowej" aplikacji dla naszej głównej aplikacji, aby rozszerzyć jej możliwości.Komunikacja między 2 aplikacjami na tym samym urządzeniu iOS/Android z Xamarin
Zadaliśmy sobie pytanie, czy istnieje prosta komunikacja między aplikacjami na tym samym urządzeniu (nic nie znaleziono w Internecie dla tego ...). Naszą pierwszą myślą było stworzenie gniazda serwera w naszej aplikacji dodatkowej i wysłanie do niego danych z głównej aplikacji.
Oto kod C# dla serwera:
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);
}
}
}
}
I dla klienta:
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();
}
To nie wydaje się działać, bo my nasz główny app bierze ostrość, add-on aplikacji wydaje się zatrzymać słuchający.
Czy jest to ogólny sposób komunikacji między tymi dwoma aplikacjami (zawsze na tym samym urządzeniu) lub czy będziemy musieli opracować osobne rozwiązanie? jeśli oddzielne rozwiązania, jakie jest najlepsze rozwiązanie dla systemu iOS? Android? Użyliśmy Xamarin dla naszej aplikacji dodatkowej, a obecnie kierujemy ją tylko na iOS i Androida.
Uwaga: ponieważ to to samo urządzenie, nie chcemy używać odległych usług sieciowych do komunikacji.
Czy aplikacja dodatkowa ma interfejs użytkownika, czy tylko udostępnia funkcje tła? Lokalna usługa uruchomiona na urządzeniu może być częścią rozwiązania, albo jako "most" w poprzednim przypadku, albo jako dostawca dodatkowej funkcjonalności w tym drugim. –
Dodatkowa aplikacja będzie miała swój własny interfejs, jeśli będzie to potrzebne, ale głównie działa jako usługa. Wygląda jednak na to, że usługa lokalna jest dostępna tylko dla systemu Android (inaczej jest nazwana inaczej w systemie iOS, a ja jej nie znalazłem). – cdie
Wymagania dotyczące Sandboxing w iOS zapobiegną temu zjawisku, możesz komunikować się między dwiema aplikacjami, korzystając z nowej architektury rozszerzeń wprowadzonej https://developer.apple.com/app-extensions/ – Clint