2017-09-20 2 views
0

Wenn ich einen tiefen Link mit dem branch.io erstellt habe, öffnet sich ein bestimmter Bildschirm in meiner App. Wenn dieser Link auch in meiner App verfügbar ist und ein Nutzer darauf klickt, öffnet er meinen Bildschirm? oder es wird nichts tun, da der Link, den ich von der App aus öffne, auf dieselbe App verweist?Was passiert, wenn der Benutzer auf Deep Link in der App selbst klickt

Antwort

1

Wenn Sie in Ihrer App auf einen Zweiglink innerhalb eines WebView klicken, müssen Sie nach dem Lesen der Branch-Link-Parameter mit dem Routing zu der spezifischen Aktivität fertig werden.

Hier ist eine Beispielaktivität, die ein WebView enthält und ein paar Branch-Links zeigt. Wenn Sie auf einen Link in der webView klicken wieder öffnet die Webansicht und zeigt die Verbindungsparameter in einer Toast Nachricht, wenn ein Zweig Link

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

geklickt wird Nachdem Sie die Verbindungsparameter lesen können Sie Route auf die entsprechende Aktivität basierend auf die Verbindungsparameter.

Verwandte Themen