Pass multiple params via Firebase Dynamic links An

2019-05-07 16:52发布

问题:

I've used Firebase Dynamics link and it can open my app, go to play store or go to an URL. But when I pass some parameters through link, I can only get first parameter. Here's my dynamic links:

https://xx.app.goo.gl/?link=http://xx.com/?usn=abc&pass=def&apn=com.xx&afl=http://google.com

And I used this code to get the link:

// Build GoogleApiClient with AppInvite API for receiving deep links
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this, this)
                .addApi(AppInvite.API)
                .build();

        // Check if this app was launched from a deep link. Setting autoLaunchDeepLink to true
        // would automatically launch the deep link if one is found.
        boolean autoLaunchDeepLink = false;
        AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, autoLaunchDeepLink)
                .setResultCallback(
                        result -> {
                            if (result.getStatus().isSuccess()) {
                                // Extract deep link from Intent
                                Intent intent = result.getInvitationIntent();
                                String deepLink = AppInviteReferral.getDeepLink(intent);
                                Logger.e(deepLink);
                            }
                        }
                );

And the log print: http://xx.com/?usn=abc (the pass=def was lost) Anyone resolve this issue?

回答1:

You need to URL encode the value of the link parameter, otherwise the system can't tell what is a parameter of the Dynamic Link and what is a sub-paramater of the link parameter of the Dynamic Link.

This means the final URL should look like https://xx.app.goo.gl/?link=http%3A%2F%2Fxx.com%2F%3Fusn%3Dabc%26pass%3Ddef&apn=com.xx&afl=http://google.com

Important note: if you are (as I suspect) attempting to pass usernames and passwords through as plaintext link parameters, this is an incredibly bad idea. Seriously, do not do this. Read this answer for the proper approach to a requirement like this.