android - Firebase 动态链接无法获取参数

标签 android firebase firebase-dynamic-links

我正在我的应用程序中处理邀请,我希望用户推荐其他人,推荐人将在他们推荐的人注册后获得奖励。我正在关注这个 firebase invite tutorial,在第 2 步中,我们使用我们的参数 invitedby=SENDER_UID 从我们的正常链接创建了一个动态链接,例如

           String link = "https://samplelink.com/?invitedby=" + user.getPhone();
        Log.e(TAG, "Generated link: "+link);
        FirebaseDynamicLinks.getInstance().createDynamicLink()
                .setLink(Uri.parse(link))
                .setDynamicLinkDomain(getString(R.string.dynamic_link_domain))
                .setAndroidParameters(
                        new DynamicLink.AndroidParameters.Builder(getPackageName())
                                .build())
                .setIosParameters(
                        new DynamicLink.IosParameters.Builder("com.example.ios")
                                //.setAppStoreId("123456789")
                              //  .setMinimumVersion("1.0.1")
                                .build())
                .buildShortDynamicLink()
                .addOnSuccessListener(shortDynamicLink -> {

                    Uri mInvitationUrl = shortDynamicLink.getShortLink();
                    Log.e(TAG, "generated URL: "+mInvitationUrl.toString());
                    Intent intent = new AppInviteInvitation.IntentBuilder(getString(R.string.invite_and_earn))
                            .setMessage(getString(R.string.invitation_message))
                            .setDeepLink(mInvitationUrl)
                            //   .setCustomImage(Uri.parse(getString(R.string.invitation_custom_image)))
                           // .setCallToActionText(user.getPhone())
                            .build();
                    startActivityForResult(intent, REQUEST_INVITE);
                }).addOnFailureListener(e -> Log.e(TAG, "Error Generating Deeplink: "+e.getLocalizedMessage()));


    });

并发送生成的短动态链接。当用户在第 4 步中打开应用时,我们得到了如下链接

 FirebaseDynamicLinks.getInstance()
        .getDynamicLink(getIntent())
        .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
            @Override
            public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
                // Get deep link from result (may be null if no link is found)
                Uri deepLink = null;
                if (pendingDynamicLinkData != null) {
                    deepLink = pendingDynamicLinkData.getLink();
                }
                //
                // If the user isn't signed in and the pending Dynamic Link is
                // an invitation, sign in the user anonymously, and record the
                // referrer's UID.
                //
                FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                if (user == null
                        && deepLink != null
                        && deepLink.getBooleanQueryParameter("invitedby")) {
                    String referrerUid = deepLink.getQueryParameter("invitedby");
                    createAnonymousAccountWithReferrerInfo(referrerUid);
                }
            }
        });

如果在浏览器中打开原始 https://samplelink.com/?invitedby="+ user.getPhone() 显示但在应用程序中我只得到 shortdynamiclink 所以 invitedby 是永远找不到的。有人遇到过这个问题吗?

我的 short dynamic link 示例

最佳答案

您可以使用 appendQueryParameter()

而不是将参数与链接连接起来
String link = "https://samplelink.com/";
        Log.e(TAG, "Generated link: "+link);
        FirebaseDynamicLinks.getInstance().createDynamicLink()
                .setLink(Uri.parse(link).buildUpon().appendQueryParameter("invitedby",user.getPhone()).build())
                .setDynamicLinkDomain(getString(R.string.dynamic_link_domain))
                .setAndroidParameters(
                        new DynamicLink.AndroidParameters.Builder(getPackageName())
                                .build())
                .setIosParameters(
                        new DynamicLink.IosParameters.Builder("com.example.ios")
                                //.setAppStoreId("123456789")
                              //  .setMinimumVersion("1.0.1")
                                .build())

并且在您的 Activity 中可以如下检索您的参数,

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

                            if (finalDeepLink != null && finalDeepLink.getBooleanQueryParameter("invitedby", false)) {
                                String referrerPhoneId = finalDeepLink.getQueryParameter("invitedby");

关于android - Firebase 动态链接无法获取参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50341159/

相关文章:

ios - Firebase 动态链接不会从 iOS 中的 facebook 帖子导航到 ios app/appstore

java - 无法正确使用 SharedPreferences

android - 以编程方式获取网关和子网掩码详细信息

android - list 合并失败 : uses-sdk:minSdkVersion 8 cannot be smaller than version 9 declared in library [com. google.android.gms :play-services:7. 8.0]

ios - 我更新了 Firebase 的 cocoapods,现在我的应用程序显示错误消息

firebase - 如何在 Firebase 主机上设置私有(private)环境变量?

javascript - 当作为参数传递给 firebase 动态链接时,Firebase 存储访问 token 被删除

java - HttpURLConnection返回的InputStream中的数据在读取之前存储在哪里?

Firebase 存储允许删除文件

javascript - 将自定义域与 Firebase 动态链接结合使用