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

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

问题描述:

我是firebase的新手。我使用的是旧版本的代码,其中我放入的参数至少为url工作。但现在当点击链接时,浏览器打开,并且找不到请求url的400错误。它只有在动态链接的作品在Firebase动态链接中传递参数不起作用

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")); 
      } 
     }); 


    } 

主要活动的OnCreate代码:

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); 
        } 
       }); 

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 ?谢谢

+0

尝试在控制台中或通过代码创建与构建器的链接:https://firebase.google.com/docs/dynamic-links/android/create –

+0

@DimaRostopira这就是说,在Android中,参数只是最低应用版本和后备网址。但我想添加一个带有字符串值的键,以便在应用程序打开时使用它 – L3G3NDj

+0

是否需要使用参数?你不能像'https:// example.com/value1/value2'那样使用它吗? –

我最终通过试错得出的问题是代码的编码部分。当我删除了:

encodedUri = URLEncoder.encode(APP_URI.toString(), "UTF-8"); 

一部分,刚刚通过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()); 

它的工作。没问题。检索参数是通常的。