オープンソース会議用のアプリを書いています。
元々、各参加者はメールまたはSMSのように異なるリンクを受け取ります
https://example.com/?token=fccfc8bfa07643a1ca8015cbe74f5f17
このリンクを使用してアプリを開くと、トークンによってユーザーがどの出席者であるかを知ることができます。
Firebaseは、I/O 2016の新しい機能であるダイナミックリンクをリリースし、ユーザーにより良いエクスペリエンスを提供します。
私はそれを試してみましたが、ダイナミックリンクでカスタムパラメーター(トークン)を渡す方法が見つかりません、ユーザーに異なるパラメーターで同じリンクを使用する方法はありますか?
ありがとう。
ユーザーごとに短い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 を使用できます。
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
}
}
});
RESTでカスタム引数を持つダイナミックリンクを使用する場合、ペイロードの例を次に示します。
{
"dynamicLinkInfo": {
"dynamicLinkDomain": "example.app.goo.gl",
"link": "http://someurl.com?my_first_param=test&my_second_param=test2"
},
"suffix": {
"option":"UNGUESSABLE"
}
}
DynamicLinkDomainから「https://」を削除してください。
ジュリアン
リンクに追加のパラメーターを追加して、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.");
}
}
});
All騒はいらない
このようなリンクを書きます。
//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);
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();
上記のすべてを試してみましたが、動作しません。リンクを変更する必要があると思いますhttp://example.com/?userid=123
にhttp://example.com/userid/123