Firebase dynamic link support custom parameters?
我正在为开源会议编写一个应用程序。
最初每个与会者将通过电子邮件或短信收到不同的链接,例如
https://example.com/?token=fccfc8bfa07643a1ca8015cbe74f5f17
然后用这个链接打开app,我们可以通过token知道用户是哪个参加者。
Firebase 在 I/O 2016 中发布了一个新功能 Dynamic Links,它为用户提供了更好的体验。
我试过了,但是我找不到任何方法在动态链接中传递自定义参数(令牌),如何将具有不同参数的相同链接使用给我的用户?
谢谢。
我认为您不能使用短网址:
除非您为每个用户创建一个,但您可以使用长 url:
并为每个用户设置新令牌。
我假设您会自动生成令牌。在这种情况下,您可以使用它来缩短链接。
1) 来自
2) 在某处创建链接,例如在您的汇合页面上(这里我们添加我们的参数):
1 | https://PROJECTNAME.page.link/?link=https://PROJECTNAME.page.link/LINKNAME?PARAMETER=1&ofl=https://www.PROJECTNAME.com/ |
PARAMETER 是您的自定义参数。
ofl 是从另一个平台(PC、Mac)单击链接时转到的链接。
3) 从android项目Kotlin代码中获取链接数据:
1 2 3 4 5 6 | Firebase.dynamicLinks .getDynamicLink(intent) .addOnSuccessListener { pendingDynamicLinkData -> val parameter: String = pendingDynamicLinkData?.link?.getQueryParameter("PARAMETER").orEmpty() } |
如果您想在 REST 中使用带有自定义参数的动态链接,下面是一个有效负载示例:
1 2 3 4 5 6 7 8 9 | { "dynamicLinkInfo": { "dynamicLinkDomain":"example.app.goo.gl", "link":"http://someurl.com?my_first_param=test&my_second_param=test2" }, "suffix": { "option":"UNGUESSABLE" } } |
确保从您的 dynamicLinkDomain 中删除"https://"
朱利安
案例A.如果你想把短链接展开成有多个参数的链接:
在您设置动态链接的部分,您附加到深层链接 URL 的任何参数都将适用于所有平台(web、iOS、android)
案例B.如果要使用动态参数,应该使用api创建短链接
见文档
现在您可以通过
https://firebase.google.com/docs/dynamic-links/android/create
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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 首先将 Firebase 控制台中的动态链接从 http://exampleandroid/test 更改为 http://exampleandroid/test?data 2. 您使用此发送查询参数数据
1 2 3 4 5 6 7 8 9 10 11 | 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 生成短网址。
在这里,我给出了使用 Firebase API 生成短 URL 的示例。
这里 ServiceRequestHelper(this).PostCall 是我发出 API 请求的通用类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | 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(); } |
在您的接收活动中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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."); } } }); |
用于生成动态链接的网络应用程序。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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); |
我尝试了以上所有方法,但没有任何效果。所以我认为你应该将链接
不需要所有的喧嚣
这样写链接。
1 2 3 4 5 6 7 8 9 10 11 | //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); |