Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add parameter to Firebase Dynamic Links

I want to let the user share a product from my app by clicking a button and sending other potential users links like

www.myapp.com/offer/123

there, "123" must be generated at the moment the user click the button in order to, later in time, hanle it with

FirebaseDynamicLinks.getInstance()
            .getDynamicLink(getIntent())
            .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
                @Override
                public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
                    Uri deepLink;
                    if (pendingDynamicLinkData != null) {
                        deepLink = pendingDynamicLinkData.getLink();

but unfortunetly I am unable to pass a parameter.

String link = "http://www.myapp.com/offer/123";
        Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
                .setLink(Uri.parse(link))
                .setDynamicLinkDomain("fgd3e.app.goo.gl")
                .buildShortDynamicLink()
                .addOnCompleteListener(this, new OnCompleteListener<ShortDynamicLink>() {
                    @Override
                    public void onComplete(@NonNull Task<ShortDynamicLink> task) {
                        if (task.isSuccessful()) {
                            // Short link created
                            Uri shortLink = task.getResult().getShortLink();
                            Uri flowchartLink = task.getResult().getPreviewLink();

Can someone teach me how to create a dynamic link at runtime with custom parameters in order to re direct the target user to specific product detail?

like image 688
Agustin Zanini Avatar asked Dec 11 '22 07:12

Agustin Zanini


1 Answers

SHORT ANSWER: Using query parameters instead of path variables you could use the getQueryParameter method from the Uri object returned by pendingDynamicLinkData.getLink()


What i've been doing is using query parameters instead of path variables.

Instead of sending http://www.myapp.com/offer/123, i'm sending something like http://www.myapp.com/?offer=123

To add parameters dynamically i'm just concatenating strings: "http://www.myapp.com/?offer=" + myValue

This URL is in turn a query parameter of the dynamic link created in firebase:

String url = "https://YourDynamicLinkIdentifier.app.goo.gl/?link=https://myapp.com?offer=" 
+ myOfferVar 
+ "&apn=com.your.apn"; // << Dont forget to change this too

And this resulting URL is the one i send to the url shortener.

Then in the callback onSuccess(PendingDynamicLinkData pendingDynamicLinkData) call getLink() of pendingDynamicLinkData as you're already doing.

Now that you have a Uri object, you can easily get the parameter by calling the method getQueryParameter("offer").

if (pendingDynamicLinkData != null) {
     deepLink = pendingDynamicLinkData.getLink();
     String offerKey = deepLink.getQueryParameter("offer");

NOTE: In case you still prefer to use the path variable, you could get the last segment of the Uri path. See How to obtain the last path segment of an uri

like image 110
AarónBC. Avatar answered Jan 03 '23 03:01

AarónBC.