作者:我是来工作的程_586 | 来源:互联网 | 2023-02-12 15:18
我正在手动创建Firebase动态/深层链接,如下所示:
Uri BASE_URI = Uri.parse("http://example.com/");
String packageName = getBaseContext().getPackageName();
Uri APP_URI = BASE_URI.buildUpon().path(requestID.getText().toString().trim()+"%3DrequestID="+requestID.getText().toString().trim()+"%3Dextra1="+extra1.getText().toString().trim()+"%3Dextra2="+extra2.getText().toString().trim()).build();
String encodedUri = URLEncoder.encode(APP_URI.toString(), "UTF-8");
Uri deepLink = Uri.parse("https://appcode.app.goo.gl/?link="+encodedUri+"&apn="+packageName+"&amv="+16+"&ad="+0);
然后我与另一个用户分享它,他正在接收这个链接:http://example.com/-KcP1YHgGsg3tVYybX8b%253DrequestID%3D-KcP1YHgGsg3tVYybX8b%253Dextra1%3Dtext1%253Dextra2%3D3%253Dtext2
.
然后使用以下代码我试图从这里获取查询参数(链接中的额外参数):
boolean autoLaunchDeepLink = false;
AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, autoLaunchDeepLink)
.setResultCallback(
new ResultCallback() {
@Override
public void onResult(@NonNull AppInviteInvitationResult result) {
if (result.getStatus().isSuccess()) {
// Extract deep link from Intent
Intent intent = result.getInvitationIntent();
final String deepLink = AppInviteReferral.getDeepLink(intent);
Log.d("deepLinkMainActivity", deepLink);
Uri uri = Uri.parse(deepLink);
String requestId = uri.getQueryParameter("requestID");
Log.d("requestId123", requestId);
} else {
Log.d("getInvitation", "getInvitation: no deep link found.");
}
}
});
但应用程序正在崩溃显示:java.lang.NullPointerException: println needs a message
因为uri.getQueryParameter("requestID");
正在返回null
.
我做错了什么,如何从中获取查询参数deep-link
?
请告诉我.
1> Bryan Acuña ..:
这是我的网址
Uri APP_URI = BASE_URI.buildUpon().path(requestID.getText().toString().trim()+"%3DrequestID="+requestID.getText().toString().trim()+"%3Dextra1="+extra1.getText().toString().trim()+"%3Dextra2="+extra2.getText().toString().trim()).build();
如果您解码此Url,您将收到类似的内容
http://www.airbanq.com?name=45=extra1=45=extra2=12=extra3=455
该值%3D
等于a =
.要在查询字符串中连接值,您需要使用此&,也许您可以尝试避免编码和解码,然后重试.我在另一个帖子中建议了这个选项,因为对于我来说,使用旧版本的FIrebase工作正常.
这是你的null错误背后的主要原因,基本上你试图从中获取一个查询字符串
http://www.airbanq.com?name=45=extra1=45=extra2=12=extra3=455
创建一个这样的链接
http://www.airbanq.com?name=45&extra1=45&extra2=12&extra3=455
,让我知道.使用您的代码进行此更改后,这将正常工作.
更新1
我将与您分享一些代码,希望这可以解决您的问题.
此代码基于您现在拥有的内容
第一部分是创建URL并添加一些参数,如您所见
Uri BASE_URI = Uri.parse("http://example.com/");
Uri APP_URI = BASE_URI.buildUpon().appendQueryParameter("requestID", "200").
appendQueryParameter("extra1", "value").
appendQueryParameter("extra2", "value").build();
String encodedUri = null;
try {
encodedUri = URLEncoder.encode(APP_URI.toString(), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
Uri deepLink = Uri.parse("https://app.app.goo.gl/?link="+encodedUri+"&apn=com.xx.xx.dev");
最后一部分只是为了接收深层链接并读取值
AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, autoLaunchDeepLink)
.setResultCallback(
new ResultCallback() {
@Override
public void onResult(AppInviteInvitationResult result) {
Log.d(TAG, "getInvitation:onResult:" + result.getStatus());
if (result.getStatus().isSuccess()) {
// Extract information from the intent
Intent intent = result.getInvitationIntent();
String deepLink = AppInviteReferral.getDeepLink(intent);
String invitatiOnId= AppInviteReferral.getInvitationId(intent);
try {
deepLink = URLDecoder.decode(deepLink, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
Uri uri = Uri.parse(deepLink);
String requestId = uri.getQueryParameter("requestID");
String requestId2 = uri.getQueryParameter("extra2");
// Because autoLaunchDeepLink = true we don't have to do anything
// here, but we could set that to false and manually choose
// an Activity to launch to handle the deep link here.
// ...
}
}
});
最后这是明显的
希望这可以解决您的问题