同一设备上的 2 个应用程序之间的通信 iOS / Android 与 Xamarin

本文关键字:iOS 通信 Android Xamarin 之间 应用程序 | 更新日期: 2023-09-27 18:35:37

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

我们问自己,在同一设备上是否有简单的应用程序间通信(在互联网上找不到任何内容......我们的第一个想法是在附加应用程序上创建一个服务器套接字,并将数据从主应用程序发送到它。

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

它似乎不起作用,因为我们的主要应用程序占据了焦点,附加应用程序似乎停止收听。

这是这两个应用程序(始终在同一设备上)之间进行通信的通用方式,还是我们必须开发单独的解决方案? 如果是单独的解决方案,iOS的最佳解决方案是什么?人造人?我们将 Xamarin 用于我们的附加应用程序,目前我们只针对 iOS 和 Android。

注意:由于它是同一设备,因此我们不希望使用远程 Web 服务进行通信。

同一设备上的 2 个应用程序之间的通信 iOS / Android 与 Xamarin

经过多次搜索,似乎唯一的"跨平台"解决方案是 Url 方案。

适用于 iOS : https://developer.xamarin.com/recipes/cross-platform/app-links/app-links-ios/

安卓 : https://developer.xamarin.com/recipes/cross-platform/app-links/app-links-android/

似乎Android可以处理1Mb的数据,以便在意图中传递,而iOS可以处理URL中系统内存允许的尽可能多的数据。我们将 base64url 对数据进行编码以将其传递给 iOS 并将其添加为 base64 添加到 Intent 的 extra String 数组中。

我们必须创建一个 Android Activity 和一个 iOS ViewController 来处理 URL 的调用,所以这是特定于平台的,但主要智能可以在平台之间共享。

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