Firebase Dynamic Links не может получить параметр - PullRequest
0 голосов
/ 15 мая 2018

Я работаю над приглашениями в моем приложении, я хочу, чтобы пользователи ссылались на других, реферер получит вознаграждение после того, как зарегистрированный человек зарегистрировался.Я следовал этому учебнику по приглашению firebase , на шаге 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, поэтому Inviteby никогда не найден.У кого-нибудь была эта проблема?

Пример моей короткой динамической ссылки

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

В итоге я использовал 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));
0 голосов
/ 15 мая 2018

Вместо объединения параметра со ссылкой вы можете использовать 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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...