2016-02-22 10 views
9

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.

+0

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. –

+0

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

+0

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

Antwort

0

Nach vielen Recherchen, so scheint es, dass die einzige „Cross-Plattform-Lösung“ URL-Schema ist.

für iOS: https://developer.xamarin.com/recipes/cross-platform/app-links/app-links-ios/

Für Android: https://developer.xamarin.com/recipes/cross-platform/app-links/app-links-android/

Es scheint, dass Android 1MB von Daten verarbeiten kann in der Absicht übergeben werden, und iOS kann so viel wie der Systemspeicher in URL erlauben behandeln. Wir werden base64url Daten kodieren, um sie für iOS zu übergeben und fügen sie als base64 in das extraString Array von intent für Android ein.

Wir haben ein Android-Aktivität und ein iOS-Viewcontroller erstellen die Anrufe des URL zu handhaben, so ist diese Plattform spezifisch, aber die Haupt Intelligenz kann zwischen Plattformen gemeinsam genutzt werden.

Auf diese Weise unsere Add-on-App müssen nicht um eine Erweiterung von iOS‘App sein, und kann eine eigene Schnittstelle und Bildschirme haben.

+0

Kennen Sie eine Möglichkeit, mit 'Diensten' zu kommunizieren (keine Benutzeroberfläche)? Wie hier beschrieben: https://forums.xamarin.com/discussion/66481/microservices-simple-message-broker#latest – Apidcloud

Verwandte Themen