Firebase 动态 link 支持自定义参数吗?
Firebase dynamic link support custom parameters?
我正在为开源会议编写应用程序。
最初每个与会者将通过电子邮件或短信收到不同的 link
https://example.com/?token=fccfc8bfa07643a1ca8015cbe74f5f17
然后使用这个link打开应用程序,我们可以通过令牌知道用户是哪个与会者。
Firebase 在 I/O 2016 年发布了动态链接的新功能,它为用户提供了更好的体验。
我试过了,但我找不到任何方法在动态 link 中传递自定义参数(令牌),如何使用相同的 link 和不同的参数来我的用户?
谢谢。
我认为你不能使用短 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)
并为每个用户设置新令牌。
我假设您会自动生成令牌。在这种情况下,您可以使用 this 来缩短链接。
您可以向 link 添加额外的参数以从 Firebase 生成短片 URL。
在这里,我给出了使用 Firebase API 生成 Short URL 的示例。
这里 ServiceRequestHelper(this).PostCall 是我的通用 class 来发出 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();
}
在您的接收中Activity:
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.");
}
}
});
现在您可以通过 FirebaseDynamicLinks.getInstance().createDynamicLink()
使用 Firebase SDK 创建短链接:
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://'
朱利安
不需要那么忙
- 如果要传递参数,请不要缩短url
这样写链接。
//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);
我尝试了以上所有方法,但 none 有效。所以我认为你应该将 link http://example.com/?userid=123
更改为 http://example.com/userid/123
1 首先在 http://exampleandroid/test to http://exampleandroid/test?data 的 firebase 控制台中更改动态 Link 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();
对于生成动态链接的网络应用程序。
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);
情况 A。如果您希望将短 link 扩展为具有多个参数的 link:
在您设置动态 link 的部分,您附加到深度 link URL 的任何参数都将在所有平台(网络、iOS、 android)
案例B。如果你想使用动态参数,你应该使用api来创建一个简短的link
1) 来自 https://console.firebase.google.com/
(此处不需要自定义参数。)
2) 在某处创建 link,f.e。在你的 confluence 页面上(这里我们添加我们的参数):
https://PROJECTNAME.page.link/?link=https://PROJECTNAME.page.link/LINKNAME?PARAMETER=1&ofl=https://www.PROJECTNAME.com/
PARAMETER 是您的自定义参数。
ofl 是 link 如果从另一个平台(PC,Mac)点击 link 去哪里。
3) 从 android 项目 Kotlin 代码中获取 link 数据:
Firebase.dynamicLinks
.getDynamicLink(intent)
.addOnSuccessListener { pendingDynamicLinkData ->
val parameter: String =
pendingDynamicLinkData?.link?.getQueryParameter("PARAMETER").orEmpty()
}
我正在为开源会议编写应用程序。
最初每个与会者将通过电子邮件或短信收到不同的 link
https://example.com/?token=fccfc8bfa07643a1ca8015cbe74f5f17
然后使用这个link打开应用程序,我们可以通过令牌知道用户是哪个与会者。
Firebase 在 I/O 2016 年发布了动态链接的新功能,它为用户提供了更好的体验。
我试过了,但我找不到任何方法在动态 link 中传递自定义参数(令牌),如何使用相同的 link 和不同的参数来我的用户?
谢谢。
我认为你不能使用短 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)
并为每个用户设置新令牌。
我假设您会自动生成令牌。在这种情况下,您可以使用 this 来缩短链接。
您可以向 link 添加额外的参数以从 Firebase 生成短片 URL。 在这里,我给出了使用 Firebase API 生成 Short URL 的示例。 这里 ServiceRequestHelper(this).PostCall 是我的通用 class 来发出 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();
}
在您的接收中Activity:
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.");
}
}
});
现在您可以通过 FirebaseDynamicLinks.getInstance().createDynamicLink()
使用 Firebase SDK 创建短链接:
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://'朱利安
不需要那么忙
- 如果要传递参数,请不要缩短url
这样写链接。
//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);
我尝试了以上所有方法,但 none 有效。所以我认为你应该将 link http://example.com/?userid=123
更改为 http://example.com/userid/123
1 首先在 http://exampleandroid/test to http://exampleandroid/test?data 的 firebase 控制台中更改动态 Link 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();
对于生成动态链接的网络应用程序。
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);
情况 A。如果您希望将短 link 扩展为具有多个参数的 link:
在您设置动态 link 的部分,您附加到深度 link URL 的任何参数都将在所有平台(网络、iOS、 android)
案例B。如果你想使用动态参数,你应该使用api来创建一个简短的link
1) 来自 https://console.firebase.google.com/
(此处不需要自定义参数。)
2) 在某处创建 link,f.e。在你的 confluence 页面上(这里我们添加我们的参数):
https://PROJECTNAME.page.link/?link=https://PROJECTNAME.page.link/LINKNAME?PARAMETER=1&ofl=https://www.PROJECTNAME.com/
PARAMETER 是您的自定义参数。
ofl 是 link 如果从另一个平台(PC,Mac)点击 link 去哪里。
3) 从 android 项目 Kotlin 代码中获取 link 数据:
Firebase.dynamicLinks
.getDynamicLink(intent)
.addOnSuccessListener { pendingDynamicLinkData ->
val parameter: String =
pendingDynamicLinkData?.link?.getQueryParameter("PARAMETER").orEmpty()
}