Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在firebase动态链接中传递参数不起作用_Java_Android_Firebase_Url_Firebase Dynamic Links - Fatal编程技术网

Java 在firebase动态链接中传递参数不起作用

Java 在firebase动态链接中传递参数不起作用,java,android,firebase,url,firebase-dynamic-links,Java,Android,Firebase,Url,Firebase Dynamic Links,我是firebase的新手。我使用的是一个旧版本代码,其中我输入的参数至少适用于url。但现在,当点击链接时,浏览器会打开,并显示一个400错误,即未找到请求的url。它仅适用于动态链接 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Uri BASE_URI = U

我是firebase的新手。我使用的是一个旧版本代码,其中我输入的参数至少适用于url。但现在,当点击链接时,浏览器会打开,并显示一个400错误,即未找到请求的url。它仅适用于动态链接

 button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Uri BASE_URI = Uri.parse("http://example.com/");

                Uri APP_URI = BASE_URI.buildUpon().
                        appendQueryParameter("extra1", "value").build();


                String encodedUri = null;
                try {
                    encodedUri = URLEncoder.encode(APP_URI.toString(), "UTF-8");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                Log.v("ENCODED URI: ", encodedUri);
                Uri deepLink = Uri.parse("https://eh62u.app.goo.gl/y6N7/?link="+encodedUri);
                Intent intent = new Intent(Intent.ACTION_SEND);
                intent.setType("text/plain");
                intent.putExtra(Intent.EXTRA_EMAIL, "");
                intent.putExtra(Intent.EXTRA_SUBJECT, "GET TICKETS" );
                intent.putExtra(Intent.EXTRA_TEXT, "Click here to get the booked tickets: " + deepLink);

                startActivity(Intent.createChooser(intent, "Send Email"));
            }
        });


    }
创建代码时的主要活动:

setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.button);



        FirebaseDynamicLinks.getInstance().getDynamicLink(getIntent())
                .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
                    @Override
                    public void onSuccess(PendingDynamicLinkData data) {
                        if (data == null) {
                            Log.d("NULL DATA  ", "getInvitation: no data");
                            return;
                        }

                        // Get the deep link
                        Uri deepLink = data.getLink();
                        String requestId2 = deepLink.getQueryParameter("extra1");


                        // Handle the deep link
                        // [START_EXCLUDE]
                        Log.d("DEEP LINK URL  ", "deepLink:" + deepLink);
                       if (deepLink != null) {

                            if(requestId2 == "value") {
                                        Intent intent = new Intent(getApplicationContext(), Main2Activity.class);

                                        startActivity(intent);
                                    }
                        }
                        // [END_EXCLUDE]
                    }
                })
                .addOnFailureListener(this, new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.w("onFailure:  ", "getDynamicLink:onFailure", e);
                    }
                });
setContentView(R.layout.activity\u main);
按钮=(按钮)findViewById(R.id.button);
FireBaseDynamicLink.getInstance().getDynamicLink(getIntent())
.addOnSuccessListener(此,新的OnSuccessListener(){
@凌驾
成功时公共无效(PendingDynamicLinkData数据){
如果(数据==null){
Log.d(“空数据”,“获取邀请:无数据”);
返回;
}
//获取深层链接
Uri deepLink=data.getLink();
String requestId2=deepLink.getQueryParameter(“extra1”);
//处理深层链接
//[开始时不包括]
Log.d(“深度链接URL”,“深度链接:“+deepLink”);
if(deepLink!=null){
if(requestId2==“值”){
Intent Intent=新的Intent(getApplicationContext(),Main2Activity.class);
星触觉(意向);
}
}
//[完]
}
})
.addOnFailureListener(此,新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Log.w(“onFailure:”,“getDynamicLink:onFailure”,e);
}
});
Android清单代码:

 <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <intent-filter> <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data
                    android:host="example.com"
                    android:scheme="https"/>
            </intent-filter>



        </activity>
        <activity android:name=".Main2Activity">

        </activity>
    </application>


如何放置参数,然后在onSuccess中获取它?谢谢

我通过反复试验最终解决的问题是代码的编码部分。当我删除了以下内容:

encodedUri = URLEncoder.encode(APP_URI.toString(), "UTF-8");
part并将APP_URI传递给了深层链接,如

Uri deepLink = Uri.parse("https://eh62u.app.goo.gl/y6N7/?link="+APP_URI);
甚至可以使用builder作为构建链接:

Uri.Builder URLbuilder = new Uri.Builder()
                .scheme("https")
                .authority(Constants.DOMAIN)
                .path("/")
                .appendQueryParameter("link", getBaseUri(value))
                .appendQueryParameter("apn", context.getPackageName());

成功了。没问题。检索参数是正常的。

尝试在控制台中创建与builder的链接,或使用代码:@DimaRostopira。这表示在android中,参数仅为最低应用程序版本和回退url。但是我想添加一种带有字符串值的键,这样我就可以在应用程序打开时使用它。你需要使用params吗?你不能像
https://example.com/value1/value2
?@DimaRostopira我不知道这是否有效,但是当应用程序打开时,我如何获得“value1”或“value2”?我就是这样做的
url.split('/').last()