与Xamarin在同一设备iOS / Android上的两个应用之间的通信

我们目前正在开发一款应用程序,它是我们主应用程序的一种“附加”应用程序,以扩展其可能性。

我们问自己,是否在同一台设备上有简单的应用程序间通信(没有在互联网上find这个…)。 我们的第一个想法是在我们的附加应用程序上创build一个服务器套接字,并从主应用程序发送数据到它。

这里是服务器的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(); } 

它似乎不工作,因为我们我们的主要应用程序需要关注,附加应用程序似乎停止倾听。

这是一个通用的方式来沟通这两个应用程序(总是在同一个设备上),还是我们必须开发单独的解决scheme? 如果单独的解决scheme,iOS的最佳解决scheme是什么? Android? 我们使用Xamarin作为附加应用程序,目前我们只针对iOS和Android。

注意:因为它是同一个设备,所以我们不想使用远程的webservice进行通信。

Solutions Collecting From Web of "与Xamarin在同一设备iOS / Android上的两个应用之间的通信"

经过多次search,似乎唯一的“跨平台”解决scheme是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添加到意图的Android的extraString数组中。

我们将不得不创build一个Android Activity和一个iOS ViewController来处理Url的调用,所以这是平台特定的,但是主要的智能可以在平台之间共享。

通过这样做,我们的附加应用程序将不需要是iOS应用程序的扩展,并且可以拥有自己的界面和屏幕。