如何制作 Firebase ShortDynamicLink Xamarin.Android
How to make Firebase ShortDynamicLink Xamarin.Android
我想为 Xamarin.Android 设置 Firebase Dynamic Link。所以我做了如下代码。
[assembly: Xamarin.Forms.Dependency(typeof(DynamicUrl))]
class DynamicUrl : Activity, IMakeDynamicUrl
{
public void MakeDynamicURL(string page)
{
//Make Long DynamicLink
DynamicLink dynamic = FirebaseDynamicLinks.Instance.CreateDynamicLink()
.SetLink(getPromotionDeepLink(page))
.SetDomainUriPrefix(MyDomain)
.SetAndroidParameters(new DynamicLink.AndroidParameters.Builder().Build())
.BuildDynamicLink();
//Make Short DynamicLink
Task shortLinkTask = FirebaseDynamicLinks.Instance.CreateDynamicLink()
.SetLink(getPromotionDeepLink(page))
.SetDomainUriPrefix(MyDomain)
.SetAndroidParameters(new DynamicLink.AndroidParameters.Builder().Build())
.BuildShortDynamicLink()
.AddOnCompleteListener(this, new OnCompleteListner());
}
}
这是我的 OnCompleteListner 代码
class OnCompleteListner : Java.Lang.Object, IOnCompleteListener
{
public void OnComplete(Android.Gms.Tasks.Task task)
{
if (task.IsSuccessful)
{
Console.WriteLine("sucess to make short dynamicLinck");
var link = task.Result.JavaCast<IShortDynamicLink().ShortLink;
//And I'll heanle here!
} else
{
Console.WriteLine("fail to make short dynamicLinck");
}
}
}
长动态Link制作精良。但是,由于 task.IsSuccessful
值为 false.
,因此无法创建 Short DynamicLink
所以我搜索了一些解决方案并找到了下面的代码。
class OnSuccessListner : Java.Lang.Object, IOnSuccessListener
{
TaskCompletionSource<string> _tcs;
public OnSuccessListner(TaskCompletionSource<string> tcs)
{
_tcs = tcs;
}
void IOnSuccessListener.OnSuccess(Java.Lang.Object result)
{
var link = result.JavaCast<IShortDynamicLink>();
_tcs.TrySetResult(link.ShortLink.ToString());
}
}
但是我不知道该把参数传给什么值TaskCompletionSource<string>
。
Task shortLinkTask = FirebaseDynamicLinks.Instance.CreateDynamicLink()
.SetLink(getPromotionDeepLink(page))
.SetDomainUriPrefix(MyDomain)
.SetAndroidParameters(new DynamicLink.AndroidParameters.Builder(Package).Build())
.BuildShortDynamicLink()
.AddOnSuccessListner (this, new OnSuccessListner('TaskCompletionSource<string> value here'));
我不知道我做错了什么。
你能告诉我另一种方法或解决方案吗?请帮助我。
未创建,因为域地址中缺少 'https://'。我会保留这个问题,因为其他人可能会出错。
我想为 Xamarin.Android 设置 Firebase Dynamic Link。所以我做了如下代码。
[assembly: Xamarin.Forms.Dependency(typeof(DynamicUrl))]
class DynamicUrl : Activity, IMakeDynamicUrl
{
public void MakeDynamicURL(string page)
{
//Make Long DynamicLink
DynamicLink dynamic = FirebaseDynamicLinks.Instance.CreateDynamicLink()
.SetLink(getPromotionDeepLink(page))
.SetDomainUriPrefix(MyDomain)
.SetAndroidParameters(new DynamicLink.AndroidParameters.Builder().Build())
.BuildDynamicLink();
//Make Short DynamicLink
Task shortLinkTask = FirebaseDynamicLinks.Instance.CreateDynamicLink()
.SetLink(getPromotionDeepLink(page))
.SetDomainUriPrefix(MyDomain)
.SetAndroidParameters(new DynamicLink.AndroidParameters.Builder().Build())
.BuildShortDynamicLink()
.AddOnCompleteListener(this, new OnCompleteListner());
}
}
这是我的 OnCompleteListner 代码
class OnCompleteListner : Java.Lang.Object, IOnCompleteListener
{
public void OnComplete(Android.Gms.Tasks.Task task)
{
if (task.IsSuccessful)
{
Console.WriteLine("sucess to make short dynamicLinck");
var link = task.Result.JavaCast<IShortDynamicLink().ShortLink;
//And I'll heanle here!
} else
{
Console.WriteLine("fail to make short dynamicLinck");
}
}
}
长动态Link制作精良。但是,由于 task.IsSuccessful
值为 false.
所以我搜索了一些解决方案并找到了下面的代码。
class OnSuccessListner : Java.Lang.Object, IOnSuccessListener
{
TaskCompletionSource<string> _tcs;
public OnSuccessListner(TaskCompletionSource<string> tcs)
{
_tcs = tcs;
}
void IOnSuccessListener.OnSuccess(Java.Lang.Object result)
{
var link = result.JavaCast<IShortDynamicLink>();
_tcs.TrySetResult(link.ShortLink.ToString());
}
}
但是我不知道该把参数传给什么值TaskCompletionSource<string>
。
Task shortLinkTask = FirebaseDynamicLinks.Instance.CreateDynamicLink()
.SetLink(getPromotionDeepLink(page))
.SetDomainUriPrefix(MyDomain)
.SetAndroidParameters(new DynamicLink.AndroidParameters.Builder(Package).Build())
.BuildShortDynamicLink()
.AddOnSuccessListner (this, new OnSuccessListner('TaskCompletionSource<string> value here'));
我不知道我做错了什么。
你能告诉我另一种方法或解决方案吗?请帮助我。
未创建,因为域地址中缺少 'https://'。我会保留这个问题,因为其他人可能会出错。