Firebase动态链接无法获取参数

时间:2018-05-15 01:42:14

标签: android firebase firebase-dynamic-links

我在我的应用程序中处理邀请,我希望用户推荐其他人,推荐人将在他们推荐的人注册后获得奖励。我正在关注此firebase invite tutorial,在第2步中,我们使用我们的参数capitalize_all('b') [B] capitalize_all('c') [C] 创建了一个动态链接,如

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步中打开应用时,我们获得了类似

的链接
short dynamic link

链接确实 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); } } }); 生成正常,并且如果在浏览器中显示已发送的原始shorted dynamic link已发送,但在应用中我只获得https://samplelink.com/?invitedby=" + user.getPhone()所以来自从未找到。有人有这个问题吗?

我的short dynamic link

的示例

2 个答案:

答案 0 :(得分:0)

您可以使用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())

在您的活动中可以检索您的参数,如下所示

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");

答案 1 :(得分:0)

我最终使用Invite API

Uri uri = Uri.parse(getString(R.string.invitation_deep_link));
        Uri deepLinkPlus = Uri.withAppendedPath(uri, user.getPhone());
        Intent intent = new AppInviteInvitation.IntentBuilder(getString(R.string.invite_and_earn))
                .setMessage(getString(R.string.invitation_message))
                .setDeepLink(deepLinkPlus)
                //.setCustomImage(Uri.parse(getString(R.string.invitation_custom_image)))
                //.setCallToActionText("invitedby")
                .build();
        startActivityForResult(intent, REQUEST_INVITE);

来自收到deeplink

的活动
 FirebaseDynamicLinks.getInstance().getDynamicLink(getIntent())
            .addOnSuccessListener(this, data -> {
                if (data == null) {
                    Log.d(TAG, "getInvitation: no data");
                    return;
                }
                Uri deepLink = data.getLink();
                String referrerPhone = deepLink.getLastPathSegment();
                SharedPreferencesUtils.saveString(this, SharedPreferencesUtils.PREF_REFERER, referrerPhone);

            })
            .addOnFailureListener(this, e -> Log.w(TAG, "getDynamicLink:onFailure", e));