firebaseunity-game-enginefirebase-dynamic-linksfirebase-invites

Unity: Receive Firebase Short Dynamic Link in DynamicLinkReceived callback event


I would like to use Firebase Dynamic Links for Unity (Android/iOS) so users can invite friends and be rewarded with. Each user gets a different Short Dynamic Link in the form of https://test.page.link/abcd The user can share this Short DynamicLink with friends.


When the invited friend comes into the app, this callback is called.

private void OnDynamicLink(object sender, EventArgs args) {
        var dynamicLinkEventArgs = args as ReceivedDynamicLinkEventArgs;
        Debug.LogFormat("Received dynamic link {0}",
                        dynamicLinkEventArgs.ReceivedDynamicLink.Url.OriginalString);
    }


Unfortunately, I only get back the base link that was necessary to create the short dynamic link.

Received dynamic link https://www.example.com/referral?xxxxxxxxxx


I get an additional native output in my iOS app:

IOSNative::Native->Unity callback data: {"m_EventName":"continueUserActivity","m_Data":"https://test.page.link/?link=https://www.example.com/referral?xxxxxxxxxx&apn=de.test.testapp&isi=123456789&ibi=de.test.testapp&cid=1579347010984123886&_osl=https://test.page.link/abcd&_fpb=AB6327276CFGHT==&_cpt=cpit&_iumenbl=1&_iumchkactval=1&_plt=2076&_uit=2692&_cpb=1"} 2020-01-14 15:30:20.455009+0100 ambassador[315:8406] IOSNative::Native->Unity callback data: {"m_EventName":"applicationDidBecomeActive","m_Data":""}


Now my question is how do I get the generated short dynamic link that I have shared with a friend in OnDynamicLink callback( https://test.page.link/abcd)?

I need the value behind the parameter "&_osl" as seen in additional native output. But I only get the Base Url back in Unity (https://www.example.com/referral?xxxxxxxxxx).


Solution

  • My solution at the end was to shorten the BaseLink with the help of DynamicLinks.GetShortLinkAsync.

                //unescape url
            baseLink = UnityEngine.Networking.UnityWebRequest.UnEscapeURL(baseLink);
    
            var components = new DynamicLinkComponents(
            // The base Link.
            new Uri(baseLink),
            // The dynamic link URI prefix.
            domainUriPrefix) {
                IOSParameters = new IOSParameters(PackageName) {
                    AppStoreId = "XXXXXXXXX"
                },
                AndroidParameters = new AndroidParameters(PackeName)
            };
    
            string inviteLink = string.Empty;
    
            await DynamicLinks.GetShortLinkAsync(components, options).ContinueWith((task) => {
                if (task.IsCanceled) {
                    Debug.LogError("GetShortLinkAsync was canceled.");
                    return;
                }
                if (task.IsFaulted) {
                    Debug.LogError("GetShortLinkAsync encountered an error: " + task.Exception);
                    return;
                }
    
                // Short Link has been created.
                inviteLink = task.Result.Url.ToString();
            });