2017-10-16 1 views
0

Ich bin neu zu Firebase. Ich benutzte einen alten Versionscode, wo die Parameter, die ich setzte, wenigstens für die URL funktionierten. aber jetzt, wenn Link geklickt wird, öffnet sich der Browser und es wurde ein Fehler 400, die angeforderte URL wurde nicht gefunden. es funktioniert nur mit dem Dynamic LinkÜbergeben von Parametern in Firebase dynamische Verbindung funktioniert nicht

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


    } 

Hauptaktivität OnCreate Code:

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 Manifest Code:

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

Wie kann ich den Parameter setzen und bekommen es dann in der onSuccess ? Danke

+0

Versuchen Sie, Link mit Builder in der Konsole oder nach Code zu erstellen: https://firebase.google.com/docs/dynamic-links/android/create –

+0

@DimaRostopira sagt, dass in Android die Parameter nur minimale App-Version und Fallback sind url. aber ich möchte eine art von schlüssel mit einem string-wert hinzufügen, so dass ich es verwenden kann, wenn die app geöffnet ist – L3G3NDj

+0

Ist es für Sie erforderlich, params zu verwenden? Kannst du es nicht verwenden wie 'https: // example.com/value1/value2'? –

Antwort

1

Das Problem, das ich schließlich durch Versuch und Irrtum herausfand, war der codierende Teil des Codes. Wenn ich die entfernt:

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

Teil und nur APP_URI wie

an die tiefe Verbindung bestanden
Uri deepLink = Uri.parse("https://eh62u.app.goo.gl/y6N7/?link="+APP_URI); 

oder auch den Aufbau der Verbindung mit Baumeister als:

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

Es funktionierte. Keine Probleme. Das Abrufen des Parameters war das übliche.

Verwandte Themen