Android Deep Linking не открывает нужную ссылку

Я хочу связать свой веб-сайт (https://freeairdrop.io) с моим приложением, чтобы при получении ссылки на мой веб-сайт, он должен предложить пользователю открыть ссылку в приложении (если оно установлено) или открыть в браузере (если приложение не установлено)

Это файл AndroidManifest.xml:

<intent-filter android:autoVerify="true">
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data
    android:scheme="https"
    android:host="freeairdrop.io" />
</intent-filter>

Файл MyActivity.java

package app.freeairdrop.io;

import android.annotation.SuppressLint;
import....



public class MainActivity extends Activity{
    private ProgressBar progressBar;
    private WebView webView;
    private SwipeRefreshLayout mySwipeRefreshLayout;
    @SuppressLint("SetJavaScriptEnabled")
    @Override
    public void onCreate(Bundle savedInstanceState) {


        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        progressBar = (ProgressBar) findViewById(R.id.progressBar);
        progressBar.setMax(100);
        webView = (WebView) findViewById(R.id.webView);
        webView.setWebViewClient(new WebViewClientDemo());
        webView.setWebChromeClient(new WebChromeClientDemo());
        webView.getSettings().setJavaScriptEnabled(true);

        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        webView.getSettings().setPluginState(WebSettings.PluginState.ON);
        webView.getSettings().setMediaPlaybackRequiresUserGesture(false);

        webView.loadUrl("https://freeairdrop.io/");

        mySwipeRefreshLayout = (SwipeRefreshLayout) this.findViewById(R.id.swipeContainer);


        mySwipeRefreshLayout.setOnRefreshListener(
                new SwipeRefreshLayout.OnRefreshListener() {
                    @Override
                    public void onRefresh() {
                        webView.reload();
                        mySwipeRefreshLayout.setRefreshing(false);
                    }
                }
        );


        // ATTENTION: This was auto-generated to handle app links.
        Intent appLinkIntent = getIntent();
        String appLinkAction = appLinkIntent.getAction();
        Uri appLinkData = appLinkIntent.getData();
    }



    private class WebViewClientDemo extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            Uri uri = Uri.parse(url);
            if (uri.getHost() != null && (url.startsWith("https://freeairdrop.io/") || url.startsWith("https://www.freeairdrop.io/"))) {
                return false;
            }

            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            view.getContext().startActivity(intent);
            return true;
        }
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            progressBar.setVisibility(View.GONE);
            progressBar.setProgress(100);
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            progressBar.setVisibility(View.VISIBLE);
            progressBar.setProgress(0);
        }
    }


    private class WebChromeClientDemo extends WebChromeClient {
        public void onProgressChanged(WebView view, int progress) {
            progressBar.setProgress(progress);
        }
    }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
            webView.goBack();
            return true;
        }
        else {
//            finish();
        }
        return super.onKeyDown(keyCode, event);
    }




    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        return true;
    }

    @Override
    // This method is used to detect back button
    public void onBackPressed() {
        if (this.webView.canGoBack()) {
            this.webView.goBack();
            return;
        }
        Builder dialog = new Builder(this);
//        dialog.setTitle((CharSequence) "Exit App");
        dialog.setMessage((CharSequence) "Do You Want To Exit The App ?");
        dialog.setPositiveButton((CharSequence) "YES", (OnClickListener) new OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                MainActivity.this.finish();
            }
        });
        dialog.setCancelable(false);
        dialog.setNegativeButton((CharSequence) "CANCEL", (OnClickListener) new OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        }).show();
    }
}

Добавляя ссылку через помощника по ссылкам, всякий раз, когда я нажимаю на дополнительные ссылки моего веб-сайта (https://freeairdrop.io/airdrop/discoin.html), он предлагает пользователю открыть ссылку в приложении, но просто открывает домашнюю страницу (https://freeairdrop.io).


person Ritesh    schedule 30.07.2019    source источник
comment
может быть полезно для работы с глубокими ссылками. ссылка: stackoverflow.com/a/56924280/11480111   -  person Alireza Tizfahm Fard    schedule 30.07.2019
comment
это имеет смысл, поскольку вы делаете это webView.loadUrl(freeairdrop.io/);   -  person letsCode    schedule 30.07.2019


Ответы (1)


Сделать диплинк довольно просто.

Возьмите намерение внутри своей деятельности, получите данные из намерения, загрузите их на веб-сайт.

Intent intent = getIntent();
Uri data intent.getData();

webview.loadURL(data);

Это не проверено, возможно, вам придется добавить свой URL-адрес перед данными.

webview.loadURL("URL_HERE" + data);
person letsCode    schedule 30.07.2019
comment
Я новичок в Android Studio. Не могли бы вы отредактировать мой MyActivity.java и предоставить мне отредактированный код. - person Ritesh; 31.07.2019
comment
Над прогрессбаром добавьте первые две строки. А затем отредактируйте строку webview.loadurl, которую вы должны добыть. Прямо вперед - person letsCode; 31.07.2019