[英]Communication between 2 apps on same device iOS/Android with Xamarin
我們目前正在為我們的主應用程序開發一個類似“附加”應用程序的應用程序,以擴展其可能性。
我們問自己在同一設備上是否有簡單的應用間通信(互聯網上沒有找到這個...)。 我們的第一個想法是在我們的附加應用程序上創建一個服務器套接字,並將數據從主應用程序發送到它。
這是服務器的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的最佳解決方案? Android? 我們將Xamarin用於我們的附加應用程序,目前我們只針對iOS和Android。
注意:因為它是同一台設備,我們不希望使用遠程Web服務進行通信。
經過多次搜索,似乎唯一的“跨平台”解決方案是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的intent的extraString數組中。
我們將不得不創建一個Android Activity和一個iOS ViewController來處理Url的調用,因此這是特定於平台的,但主要智能可以在平台之間共享。
通過這樣做,我們的附加應用程序不需要是iOS應用程序的擴展,並且可以擁有自己的界面和屏幕。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.