【问题标题】:Firebase Dynamic Links failing to fetch parameterFirebase 动态链接无法获取参数
【发布时间】:2018-05-15 01:42:13
【问题描述】:

我正在我的应用中处理邀请,我希望用户推荐其他人,推荐人将在他们推荐的人注册后获得奖励。我在关注这个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()));


    });

并发送生成的short dynamic link。当用户在第 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);
                }
            }
        });

shorted dynamic link 的链接生成正常,并发送,如果在浏览器中打开原始的https://samplelink.com/?invitedby=" + user.getPhone() 显示,但在应用程序中我只得到shortdynamiclink,所以永远找不到 invitedby。有人遇到过这个问题吗?

我的short dynamic link 示例

【问题讨论】:

    标签: android firebase firebase-dynamic-links


    【解决方案1】:

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

    【讨论】:

    • Invite API 没那么复杂
    【解决方案2】:

    我最终改用了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));
    

    【讨论】:

      猜你喜欢
      • 2022-12-23
      • 2021-01-15
      • 2021-08-25
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多