Wir entwickeln derzeit eine App, die eine Art "Add-On" -App für unsere Hauptanwendung ist, um ihre Möglichkeiten zu erweitern.Kommunikation zwischen 2 Apps auf demselben Gerät iOS/Android mit Xamarin
Wir fragten uns, ob es einfach inter-App-Kommunikation auf demselben Gerät (nichts im Internet zu dieser ...). Unser erster Gedanke war, einen Server-Socket in unserer Add-On-App zu erstellen und Daten von der Haupt-App dorthin zu senden.
Hier ist C# -Code für Server:
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);
}
}
}
}
Und für den Kunden:
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();
}
Es scheint nicht funktioniert, weil wir unsere App Fokus nimmt, scheint die Add-On-Anwendung wie zu stoppen Hören.
Ist dies eine generische Art und Weise für die Kommunikation zwischen diesen beiden Anwendungen (immer auf demselben Gerät) oder werden wir separate Lösung entwickeln müssen? Wenn separate Lösungen, was ist die beste Lösung für iOS? Android ? Wir haben Xamarin für unsere Add-On-App verwendet, und derzeit konzentrieren wir uns nur auf iOS und Android.
Hinweis: weil es gleiches Gerät ist, wir wollen nicht weit entfernte Webservice verwenden, um zu kommunizieren.
Wird die Add-On-App über eine Benutzeroberfläche verfügen oder nur Hintergrundfunktionen bereitstellen? Ein lokaler Dienst, der auf dem Gerät ausgeführt wird, könnte Teil der Lösung sein, entweder als "Brücke" im ersten Fall oder als Anbieter von Zusatzfunktionen in diesem Fall. –
Die Add-on-App wird bei Bedarf eine eigene Benutzeroberfläche haben, funktioniert jedoch hauptsächlich als Dienst. Es sieht jedoch so aus, als ob der lokale Dienst nur für Android verfügbar ist (oder in iOS anders heißt). – cdie
Die Sandbox-Anforderungen von iOS verhindern dies, Sie können zwischen zwei Apps kommunizieren, indem Sie die neue Erweiterungsarchitektur verwenden https://developer.apple.com/app-extensions/ – Clint