【问题标题】:What happens if user clicks on deep link in the app itself如果用户点击应用程序本身的深层链接会发生什么
【发布时间】:2017-09-20 12:41:38
【问题描述】:

如果我使用在我的应用中打开特定屏幕的 branch.io 创建了深层链接。如果此链接在我的应用程序中也可用并且用户单击它,它会打开我的屏幕吗?或者它什么都不做,因为我试图从应用程序打开的链接指向同一个应用程序?

【问题讨论】:

    标签: deep-linking branch.io applinks


    【解决方案1】:

    当您在 App 的 webView 中单击 Branch 链接时,您必须在读取 Branch 链接参数后处理到特定 Activity 的路由。

    这是一个示例 Activity,其中包含一个 webView 并显示了几个分支链接。当您单击 webView 中的链接时,它会重新打开 webview,如果单击 Branch 链接,则会在 Toast 消息中显示链接参数

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

    读取链接参数后,您可以根据链接参数路由到相应的 Activity。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      • 2016-06-26
      • 1970-01-01
      • 2020-07-22
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多