Attualmente stiamo sviluppando un'applicazione che è una sorta di app "add-on" per la nostra app principale per estendere le sue possibilità.Comunicazione tra 2 app sullo stesso dispositivo iOS/Android con Xamarin
Ci siamo chiesti se c'è una comunicazione inter-app semplice sullo stesso dispositivo (niente trovato su Internet per questo ...). Il nostro primo pensiero è stato quello di creare un socket server sulla nostra app aggiuntiva e inviare i dati dall'app principale ad esso.
Ecco codice C# per il 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);
}
}
}
}
E di cliente:
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();
}
Non sembra funzionare, perché noi la nostra applicazione principale si messa a fuoco, l'add-on app sembra di smettere ascoltando.
Si tratta di un modo generico di comunicazione tra queste due app (sempre sullo stesso dispositivo) o dovremo sviluppare una soluzione separata? se soluzioni separate, qual è la soluzione migliore per iOS? Android? Abbiamo usato Xamarin per la nostra app aggiuntiva e attualmente utilizziamo solo iOS e Android.
Nota: poiché è lo stesso dispositivo, non vogliamo utilizzare il servizio web remoto per comunicare.
L'app aggiuntiva ha un'interfaccia utente o fornisce solo funzionalità in background? Un servizio locale in esecuzione sul dispositivo potrebbe essere parte della soluzione, sia come "ponte" nel primo caso, sia come fornitore di funzionalità aggiuntive in quest'ultimo. –
L'app aggiuntiva avrà la propria interfaccia utente se necessario, ma funziona principalmente come servizio. Tuttavia, sembra che il servizio locale sia disponibile solo per Android (o lo si chiami diversamente in iOS e non l'ho trovato) – cdie
I requisiti sandbox di iOS impediranno questo genere di cose, puoi comunicare tra due app utilizzando la nuova architettura delle estensioni introdotta https://developer.apple.com/app-extensions/ – Clint