2017-10-16 17 views
0

Firebaseを初めて使用しています。私は古いバージョンのコードを使用していましたが、ここで私が置いたパラメータはurlで最低限のものでした。リンクがクリックされると、ブラウザが開き、URLを要求した400のエラーが見つかりませんでした。firebaseのダイナミックリンクにパラメータを渡すと動作しない

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でそれを得るのですかどのようにそれは、動的リンクで

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イベントコードを動作します?ありがとう

+0

コンソールまたはコードでビルダーとのリンクを作成してみてください:https://firebase.google.com/docs/dynamic-links/android/create –

+0

@DimaRostopiraこれはアンドロイドでパラメータが最小のアプリバージョンとフォールバックしかないurl。私はアプリを開いたときに私はそれを使用することができるように文字列の値を持つキーの並べ替えを追加したい – L3G3NDj

+0

あなたはparamsを使用する必要がありますか?あなたは 'https:// example.com/value1/value2'のように使用できませんか? –

答えて

1

私が最終的に試行錯誤で見つけた問題は、コードのエンコード部分でした。私は削除する場合:

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

をほんの一部ととして

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

あるいはビルダーを使用してリンクを構築するようにディープリンクにAPP_URIを渡さ:

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

それは働きました。問題はありません。パラメータの取得は通常通りでした。

関連する問題