如何从Web重定向生成深层链接操作

时间:2017-02-10 12:18:29

标签: android android-intent deep-linking

我有一个php文件,它会查找userAgent字符串,并使用正确的Intent来回复以启动我的应用程序。

php文件是:

<SCRIPT language=javascript>
    function redirectOnUserAgent() {

        var params = {};

        if (location.search) {
            var parts = location.search.substring(1).split('?');
        }

        var mapping = {
            // scheme : market://details?id=<package_name>
            'android': 'intent://www.example.com/ag?' + parts + '#Intent;scheme=http;package=com.my.example;end',

            ...
        }

        var userAgent = navigator.userAgent.toLowerCase();
        for (var dev in mapping) {
            if (userAgent.search(dev) != -1) {

                window.location = mapping[dev];
                return;
            }
        }

        //else redirect to another page, or nothing
        window.location = 'http://my.example.com';
    }
</SCRIPT>


<!DOCTYPE html>
    <head>
        <meta charset="UTF-8">
        <title>Redirect to AG</title>

    </head>
    <BODY onload="redirectOnUserAgent();">
    </BODY>
</html>

此文件从my.example.com/redirect_to_ag?siteId=xx&data=yy

调用

到目前为止,我正在从QRCode阅读器读取此URL,因此读者会给我网址,我点击打开,然后它会自动解释intent以启动应用程序。

现在,我想通过NFC标签做同样的事情,看到它不起作用。 但实际上,当我在Android Chrome网址字段中手动输入网址时,没有任何反应。 而且我不知道如何看到Android Chrome中会发生什么。 当我将Android Studio连接到设备时,如果我从QRCode阅读器读取网址,我会看到以下消息:

02-10 13:06:46.959 32710-32710/? W/cr_Chrome: Bad URI 'intent://www.example.com/ag?siteId=xx&data=yy#Intent;scheme=http;package=com.my.example;end'
02-10 13:06:46.962 607-1138/? I/ActivityManager: START u0 {act=android.intent.action.VIEW cat=[android.intent.category.BROWSABLE] dat=http://www.example.com/... flg=0x10000000 pkg=com.my.example cmp=com.my.example/.MainActivity (has extras)} from uid 10035 on display 0
02-10 13:06:47.004 607-4281/? I/ActivityManager: moveTaskToBack: TaskRecord{cb23831 #882 A=com.android.chrome U=0 sz=1}
02-10 13:06:47.042 607-4505/? I/ActivityManager: Start proc 392:com.android.chrome:sandboxed_process1/u0i82 for service com.android.chrome/org.chromium.content.app.SandboxedProcessService1
02-10 13:06:47.199 607-4505/? I/ActivityManager: Process com.android.chrome:sandboxed_process0 (pid 32747) has died
02-10 13:06:47.199 607-4505/? W/ActivityManager: Scheduling restart of crashed service com.android.chrome/org.chromium.content.app.SandboxedProcessService0 in 1000ms
02-10 13:06:47.226 607-617/? I/ActivityManager: Start proc 406:com.ndguide.ndguide/u0a258 for activity com.ndguide.ndguide/.MainActivity
02-10 13:06:47.264 607-673/? D/ConnectivityService: releasing NetworkRequest NetworkRequest [ id=320, legacyType=-1, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED] ]

然后应用程序启动。好!

但是当我在浏览器的地址栏中手动输入网址时,我可以看到:

02-10 13:11:43.635 5186-5186/? W/cr_Chrome: Bad URI 'intent://www.example.com/ag?siteId=xx&data=yy#Intent;scheme=http;package=com.my.example;end'
02-10 13:11:43.644 5186-5186/? I/chromium: [INFO:CONSOLE(0)] "The navigation on intent://www.example.com/ag?siteId=xx&data=yy#Intent;scheme=http;package=com.my.example;end is blocked.", source: http://my.example.com/redirect_to_ag?siteId=xx&data=yy (0)

没有更多的事情发生。

那么你能告诉我是什么阻止Chrome在手动输入同一个url时正确解释意图吗?

修改
我真的不知道它是否有用,但是当我使用QRCode Reader并使用Intent Intercept工具时,当我点击阅读器中的Open the url时,Intent Intercept会给我以下信息

ACTION:
android.intent.action.VIEW
DATA:
http://my.example.com/redirect_to_ag?siteId=xx&data=yy
MIME:
null
URI:
intent://www.example.com/ag?siteId=xx&data=yy#Intent;scheme=http;launchFlags=0x13080000;end
FLAGS:
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
FLAG_ACTIVITY_FORWARD_RESULT
FLAG_ACTIVITY_PREVIOUS_IS_TOP
FLAG_ACTIVITY_RECEIVER_FOREGROUND
EXTRAS:
none
MATCHING ACTIVITIES:
Chrome (com.android.chrome  - com.google.android.apps.chrome.Main)

然后,当我点击SEND EDITED CONTENT到Chrome时,应用程序就会启动。 好吧,在我身边,我真的不知道它对我有什么帮助......

同样,我的问题是要了解为什么当我在Chrome的地址栏中手动输入网址时,它没有发生任何事情。

0 个答案:

没有答案