web-dev-qa-db-ja.com

Firebaseダイナミックリンクはカスタムパラメータをサポートしていますか?

オープンソース会議用のアプリを書いています。

元々、各参加者はメールまたはSMSのように異なるリンクを受け取ります

https://example.com/?token=fccfc8bfa07643a1ca8015cbe74f5f17

このリンクを使用してアプリを開くと、トークンによってユーザーがどの出席者であるかを知ることができます。

Firebaseは、I/O 2016の新しい機能であるダイナミックリンクをリリースし、ユーザーにより良いエクスペリエンスを提供します。

私はそれを試してみましたが、ダイナミックリンクでカスタムパラメーター(トークン)を渡す方法が見つかりません、ユーザーに異なるパラメーターで同じリンクを使用する方法はありますか?

ありがとう。

20
Denny Huang

ユーザーごとに短い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)という長いURLを使用して、各ユーザーに新しいトークンを設定できます。

トークンを自動的に生成すると仮定します。その場合、リンクを短くするために this を使用できます。

26
diidu

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
            }
        }
    });
5
Shirane85

RESTでカスタム引数を持つダイナミックリンクを使用する場合、ペイロードの例を次に示します。

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

DynamicLinkDomainから「https://」を削除してください。

ジュリアン

3
JulienCoo

リンクに追加のパラメーターを追加して、FirebaseからショートURLを生成できます。ここでは、Firebase APIを使用したショートURL生成の例を示しました。ここで、ServiceRequestHelper(this).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.");
                            }
                        }
                    });
2
Naveen Kumar M

All騒はいらない

  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);
    
0
Job M

1まず、firebaseコンソールのダイナミックリンクを 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();
0
Dishant Kawatra

上記のすべてを試してみましたが、動作しません。リンクを変更する必要があると思いますhttp://example.com/?userid=123http://example.com/userid/123

0
chii