it-source

Firebase 동적 링크 지원 사용자 지정 매개 변수?

criticalcode 2023. 6. 6. 00:01
반응형

Firebase 동적 링크 지원 사용자 지정 매개 변수?

저는 오픈 소스 컨퍼런스를 위한 앱을 작성하고 있습니다.

원래 각 참석자는 이메일이나 SMS를 통해 서로 다른 링크를 받습니다.

https://example.com/ ?http=httpfc8bfa07643a1ca8015cbe74f5f17

그런 다음 이 링크를 사용하여 앱을 열면 토큰으로 사용자가 어떤 참석자인지 알 수 있습니다.

Firebase는 I/O 2016에서 새로운 기능인 Dynamic Links를 출시하여 사용자에게 더 나은 경험을 제공합니다.

시도해봤지만 동적 링크에서 사용자 지정 매개 변수(토큰)를 전달할 방법을 찾을 수 없습니다. 사용자에게 매개 변수가 다른 동일한 링크를 사용하려면 어떻게 해야 합니까?

감사해요.

짧은 URL은 사용할 수 없을 것 같습니다.https://<my app>.app.goo.gl/Gk3m각 사용자에 대해 하나씩 생성하지만 긴 URL을 사용할 수는 없습니다.https://<my app>.app.goo.gl/?link=https://example.com/?token=fccfc8bfa07643a1ca8015cbe74f5f17 ...(add other parameters as needed)각 사용자에 대해 새 토큰을 설정합니다.

토큰은 자동으로 생성됩니다.이 경우 링크를 단축하는 데 사용할 수 있습니다.

출발지https://console.firebase.google.com/(여기서는 사용자 지정 매개 변수가 필요하지 않습니다.)

여기에 이미지 설명 입력

결합 페이지 어딘가에 링크를 만듭니다(여기에 매개 변수를 추가합니다).

https://PROJECTNAME.page.link/?link=https://PROJECTNAME.page.link/LINKNAME?PARAMETER=1&ofl=https://www.PROJECTNAME.com/

매개 변수는 사용자 정의 매개 변수입니다.

offl은 다른 플랫폼(PC, Mac)에서 링크를 클릭할 경우 이동할 링크입니다.

Android 프로젝트 Kotlin 코드에서 링크 데이터 가져오기:

Firebase.dynamicLinks
        .getDynamicLink(intent)
        .addOnSuccessListener { pendingDynamicLinkData ->
            val parameter: String =
                pendingDynamicLinkData?.link?.getQueryParameter("PARAMETER").orEmpty()
        }

REST에서 사용자 지정 인수와 함께 동적 링크를 사용하려면 페이로드의 예를 다음에 제시합니다.

{
  "dynamicLinkInfo": {
        "dynamicLinkDomain": "example.app.goo.gl",
        "link": "http://someurl.com?my_first_param=test&my_second_param=test2"
  },
  "suffix": {
     "option":"UNGUESSABLE"
    }
}

dynamicLinkDomain에서 'https://'을(를) 제거해야 합니다.

줄리앙

  1. 동적 링크 생성

    여기에 이미지 설명 입력

  2. 링크 세부 정보로 이동

    여기에 이미지 설명 입력

  3. 동적 링크를 복사하고 URL의 링크 매개 변수(예: PARAMETER=132323)에 매개 변수를 추가합니다.

    https://link.projectname.com/ ?link=https://link.projectname.com/LINK?PARAMETER=132323&apn=com.projectname.app&afl=https ://link.projectname.com/LINK

사례 A. 매개 변수가 여러 개인 링크로 짧은 링크를 확장하려는 경우:

동적 링크를 설정하는 부분에서 딥 링크 URL에 추가하는 매개 변수는 모든 플랫폼(웹, iOS, 안드로이드)에 적용됩니다.

사례 B. 동적 매개 변수를 사용하려면 api를 사용하여 짧은 링크를 만들어야 합니다.

설명서 참조

이제 를 통해 Firebase SDK를 사용하여 짧은 링크를 만들 수 있습니다.FirebaseDynamicLinks.getInstance().createDynamicLink(): https://firebase.google.com/docs/dynamic-links/android/create

샘플 코드:

Task shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
    .setLink(Uri.parse("https://example.com/"))
    .setDynamicLinkDomain("abc123.app.goo.gl")
    // Set parameters
    // ...
    .buildShortDynamicLink()
    .addOnCompleteListener(this, new OnCompleteListener() {
        @Override
        public void onComplete(@NonNull Task task) {
            if (task.isSuccessful()) {
                // Short link created
                Uri shortLink = task.getResult().getShortLink();
                Uri flowchartLink = task.getResult().getPreviewLink();
            } else {
                // Error
            }
        }
    });

1 먼저 파이어베이스 콘솔의 동적 링크를 http://exampleandroid/test에서 http://exampleandroid/test?data로 변경 2.쿼리 매개 변수 데이터를 전송합니다.

 DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
                   // .setLink(dynamicLinkUri)
                    .setLink(Uri.parse("http://exampleandroid/test?data=dsads"))
                    .setDomainUriPrefix("https://App_Name.page.link")
                    // Open links with this app on Android
                    .setAndroidParameters(new DynamicLink.AndroidParameters.Builder().build())
                    // Open links with com.example.ios on iOS
                    .setIosParameters(new DynamicLink.IosParameters.Builder("com.appinventiv.ios").build())
                    .buildDynamicLink();

            dynamicLinkUri = dynamicLink.getUri();

링크에 매개 변수를 추가하여 Firebase에서 Short URL을 생성할 수 있습니다.여기서 저는 Firebase API를 사용한 짧은 URL 생성의 예를 제시했습니다.여기 서비스 요청도우미(이거).PostCall은 API 요청을 만드는 일반 클래스입니다.

String url = "https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=YOUR_KEY";

    try {
        PackageManager manager = this.getPackageManager();
        PackageInfo info = manager.getPackageInfo(this.getPackageName(), 0);
        JSONObject jsonObject = new JSONObject();
        JSONObject androidInfoObject = new JSONObject();
        androidInfoObject.put("androidPackageName", getApplicationContext().getPackageName());
        androidInfoObject.put("androidMinPackageVersionCode",String.valueOf(info.versionCode));

        JSONObject iosInfoObject = new JSONObject();
        iosInfoObject.put("iosBundleId", "tettares.Test_ID");
        JSONObject dynamicLinkInfoObj = new JSONObject();
        dynamicLinkInfoObj.put("dynamicLinkDomain", "wgv3v.app.goo.gl");
        dynamicLinkInfoObj.put("link", "https://test.in/?UserId=14&UserName=Naveen");  // Pass your extra paramters to here
        dynamicLinkInfoObj.put("androidInfo", androidInfoObject);
        dynamicLinkInfoObj.put("iosInfo", iosInfoObject);

        JSONObject suffixObject = new JSONObject();
        suffixObject.put("option" , "SHORT");
        jsonObject.put("dynamicLinkInfo", dynamicLinkInfoObj);
        jsonObject.put("suffix", suffixObject);

        Log.d("JSON Object : " , jsonObject.toString());

        new ServiceRequestHelper(this).PostCall(url, jsonObject, false, new CallBackJson() {
            @Override
            public void done(JSONObject result) throws JSONException {

                try {
                    if (result.has("shortLink")) {
                        DEEP_LINK_URL = result.getString("shortLink");                                                   }
                } catch(Exception e)
                {
                    e.printStackTrace();
                }

            }
        });


    } catch (JSONException | PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }

수신 활동:

boolean autoLaunchDeepLink = false;
    AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, autoLaunchDeepLink)
            .setResultCallback(
                    new ResultCallback<AppInviteInvitationResult>() {
                        @Override
                        public void onResult(@NonNull AppInviteInvitationResult result) {
                            if (result.getStatus().isSuccess()) {
                                // Extract deep link from Intent
                                Intent intent = result.getInvitationIntent();
                                String deepLink = AppInviteReferral.getDeepLink(intent);

                                // Handle the deep link. For example, open the linked
                                // content, or apply promotional credit to the user's
                                // account.

                                // [START_EXCLUDE]
                                // Display deep link in the UI
                                Log.d(TAG, "deeplink URL: " + deeplink); // Here you get https://test.in/?UserId=14&UserName=Naveen
                                // [END_EXCLUDE]
                            } else {
                                Log.d(TAG, "getInvitation: no deep link found.");
                            }
                        }
                    });

나는 모든 것을 시도했지만 아무 일도 하지 않았습니다.그래서 저는 당신이 링크를 바꿔야 한다고 생각합니다.http://example.com/?userid=123http://example.com/userid/123

서두를 필요가 없습니다.

  1. 매개 변수를 전달하려면 URL을 줄이지 마십시오.
  2. 링크를 이렇게 써주세요.

    //APP_CODE is firebase link
    String link = "https://APP_CODE.app.goo.gl/?refferer=" + userId;
    
    Intent intent = new AppInviteInvitation.IntentBuilder(getString(R.string.invitation_title))
                    .setMessage(getString(R.string.invitation_custom_message)))
                    .setDeepLink(Uri.parse(link))
                    .setCustomImage(Uri.parse(getString(R.string.invitation_custom_image)))
                    .setCallToActionText(getString(R.string.invitation_cta))
                    .build();
    
    startActivityForResult(intent, REQUEST_INVITE);
    

동적 링크를 생성하는 웹 앱의 경우.

const data = {
  dynamicLinkInfo: {
    domainUriPrefix: 'subdomain.page.link',
    link: url,
  },
  suffix: {
    option: 'SHORT'
  }
};
return fetch(`https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=${environment.firebaseConfig.apiKey}`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(data),
}).then(res => res.json()).then(response => response.shortLink).catch(console.error);

언급URL : https://stackoverflow.com/questions/38284518/firebase-dynamic-link-support-custom-parameters

반응형