74 lines
1.6 KiB
C#
74 lines
1.6 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
|
|
|
namespace ImaginationOverflow.UniversalDeepLinking.Providers
|
|
{
|
|
#if UNITY_IOS || UNITY_TVOS
|
|
public class IosLinkProvider : ILinkProvider
|
|
{
|
|
|
|
[DllImport("__Internal")]
|
|
static extern void DeepLink_RegisterCallback(UniversalLinkCallback callback);
|
|
|
|
[AOT.MonoPInvokeCallback(typeof(UniversalLinkCallback))]
|
|
private static void OnCompletionCallback(string link)
|
|
{
|
|
_lastInstance.OnLinkReceived(link);
|
|
}
|
|
|
|
private static string _lastLink;
|
|
|
|
private static IosLinkProvider _lastInstance;
|
|
|
|
public IosLinkProvider()
|
|
{
|
|
_lastInstance = this;
|
|
Initialize();
|
|
}
|
|
|
|
public bool Initialize()
|
|
{
|
|
DeepLink_RegisterCallback(OnCompletionCallback);
|
|
return true;
|
|
}
|
|
|
|
private event Action<string> _linkReceived;
|
|
|
|
public event Action<string> LinkReceived
|
|
{
|
|
add
|
|
{
|
|
_linkReceived += value;
|
|
|
|
if (string.IsNullOrEmpty(_lastLink))
|
|
return;
|
|
|
|
OnLinkReceived(_lastLink);
|
|
_lastLink = null;
|
|
|
|
}
|
|
remove { _linkReceived -= value; }
|
|
}
|
|
|
|
public void PollInfoAfterPause()
|
|
{
|
|
|
|
}
|
|
|
|
private void OnLinkReceived(string lastLink)
|
|
{
|
|
var handler = _linkReceived;
|
|
if (handler == null)
|
|
{
|
|
_lastLink = lastLink;
|
|
}
|
|
else
|
|
handler(lastLink);
|
|
}
|
|
|
|
}
|
|
#endif
|
|
}
|