2017-09-20 14 views
0

私のアプリで特定の画面を開くbranch.ioを使ってディープリンクを作成しているとします。このリンクを自分のアプリでも利用でき、ユーザーがそれをクリックすると、画面が開きますか?または私はアプリから開いてみようとしているリンクが同じアプリを指しているので何もしませんか?ユーザーがアプリ内のディープリンクをクリックするとどうなるのですか

答えて

1

アプリケーション内のWebView内のブランチリンクをクリックすると、ブランチリンクパラメータを読み取った後、特定のアクティビティへのルーティングを処理する必要があります。

ここには、webViewを含むサンプルアクティビティと、いくつかのブランチリンクが示されています。あなたはWebViewの内のリンクをクリックすると、それは、WebViewのを再び開き、あなたが適切な活動へのルートは、上のベースができ、リンクパラメータを読んでたら支店リンクが

public class MainActivity extends AppCompatActivity { 

    private WebView webView_; 
    private Button button_; 
    private String TAG = "WebViewController"; 
    private Context context_; 
    private static final String URL_TO_LOAD = "https://evangelosg.github.io/index.html"; 
    private static final String BRANCH_LINK_TO_LOAD = "https://ere6.app.link/b6sS0gsCfG"; 

    @Override 
    protected void onNewIntent(Intent intent) { 
     Log.d("WebView", "onNewIntent"); 
     setIntent(intent); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 

     Branch branch = Branch.getInstance(); 
     branch.initSession(new Branch.BranchReferralInitListener() { 
      @Override 
      public void onInitFinished(JSONObject referringParams, BranchError error) { 
       if (error == null) { 
        Log.d(TAG, referringParams.toString()); 
        Toast.makeText(context_, referringParams.toString(), Toast.LENGTH_LONG).show(); 
        if (referringParams.has(BundleExtraKeys.CLICKED_BRANCH_LINK)) { 
         try { 
          boolean clickedBranchLink = referringParams.getBoolean(BundleExtraKeys.CLICKED_BRANCH_LINK); 
          if (clickedBranchLink) { 
           //do stuff! 
          } 
         } catch (JSONException e) { 
          Log.d("BranchTrends", e.getMessage()); 
         } 
        } 
       } else { 
        Log.i("MyApp", error.getMessage()); 
       } 
      } 
     }, this.getIntent().getData(), this); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 

    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     context_ = this; 
     setContentView(R.layout.activity_main); 

     webView_ = (WebView) findViewById(R.id.webView); 
     webView_.setWebViewClient(new BranchWebViewController("app.link", MainActivity.class)); 
     webView_.loadUrl(URL_TO_LOAD); 

     button_ = (Button) findViewById(R.id.button); 
     button_.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(); 
       CustomTabsIntent customTabsIntent = builder.build(); 
       customTabsIntent.intent.putExtra("branch", BRANCH_LINK_TO_LOAD); 
       customTabsIntent.intent.putExtra("branch_force_new_session", true); 
       finish(); 
       customTabsIntent.launchUrl(MainActivity.this, Uri.parse(BRANCH_LINK_TO_LOAD)); 
      } 
     }); 
    } 

    public class BranchWebViewController extends WebViewClient { 

     private String myDomain_; 
     private Class activityToLaunch_; 

     BranchWebViewController(@NonNull String myDomain, Class activityToLaunch) { 
      myDomain_ = myDomain; 
      activityToLaunch_ = activityToLaunch; 
     } 

     @Override 
     public void onLoadResource(WebView view, String url) { 
      super.onLoadResource(view, url); 
     } 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 
      String url = request.getUrl().toString(); 

      if (url.contains(myDomain_)) { 
       Intent i = new Intent(view.getContext(), activityToLaunch_); 
       i.putExtra("branch", url); 
       i.putExtra("branch_force_new_session", true); 
       finish(); 
       startActivity(i); 
      } else { 
       view.loadUrl(url); 
      } 

      return true; 
     } 
    } 
} 

をクリックするとトーストメッセージ内のリンクパラメータを表示しますリンクパラメータ。

関連する問題