20

对于正常安装的应用程序,可以使用深度链接技术,不仅可以从 URL 打开特定应用程序,还可以将其重定向到特定部分/功能,例如特定 Facebook 帖子或地图上的特定坐标。

由于我已经阅读了即时应用程序,这是不可能的,因为链接已经指向要下载和运行的特定模块,那么如何不仅可以访问所述模块而且还可以传递一些参数?

例如:

这是我的地图应用程序的仅查看模块将下载的链接:“ www.myinstantappexample.com/onlyviewmap

如果我希望它指向一组特定的坐标,链接将如何组成?会是这样:“ www.myinstantappexample.com/onlyviewmap/?x=0.000&y=0.000 ”?

据我所知,谷歌并没有涵盖这方面,我真的无法理解它。

4

3 回答 3

24

如果我希望它指向一组特定的坐标,链接将如何组成?

如何在 URL 中包含任何附加信息取决于您。它可以通过 URL 参数或路径本身。例如。

https://www.myinstantappexample.com/location/2/user/5 https://www.myinstantappexample.com/onlyviewmap/?x=1.2&y=3.4

然后,您解析接收中的 URL Activity。该类Uri包括许多帮助方法,例如getQueryParameter()getPathSegments()使这更容易。

例如,解析这个 URL:

https://www.myinstantappexample.com/onlyviewmap/?x=1.2&y=3.4

你会在你的Activity

Uri uri = getIntent().getData();
String x;
String y;
if (uri != null) {
  x = uri.getQueryParameter("x"); // x = "1.2"
  y = uri.getQueryParameter("y"); // y = "3.4"
}
if (x != null && y != null) {
  // do something interesting with x and y
}
于 2017-05-19T23:37:25.480 回答
9

即时应用程序和深度链接

Instant Apps依赖于 App Links工作,而 App Links 只是一种深度链接。因此,即时应用程序仍然可以进行深度链接,实际上对于它们的运行方式至关重要。但是,不支持URI 方案深度链接(在 Android 应用程序中仍然非常普遍)。

普通应用和 Instant App 的区别在于,设备只会加载单个 Activity 以响应用户点击的 App Link,而不需要通过 Play 商店下载完整的包。这对用户来说是一种更无缝的体验,但底层技术的工作方式相同。

传递自定义参数

如果用户单击启用了应用链接的 URL,例如http://www.myinstantappexample.com/onlyviewmap/?x=0.000&y=0.000,您将在应用打开后将整个字符串返回到应用中。您必须自己解析xandy变量,但您可以使用它们。像这样的东西:

Uri data = this.getIntent().getData();
if (data != null && data.isHierarchical()) {
    String uri = this.getIntent().getDataString();
    Log.i("MyApp", "Deep link clicked " + uri);
}

您只需要操纵该uri值即可找到所需的内容。

自定义参数的替代方法

或者,您可以使用Branch.io(完全披露:我在 Branch 团队)来为您的链接提供动力。我们完全支持 Instant Apps,这使您可以使用更友好的数据格式。我们让您创建这样的链接,以控制行为的每个部分:

branch.link({
    tags: [ 'tag1', 'tag2' ],
    channel: 'facebook',
    feature: 'dashboard',
    stage: 'new user',
    data: {
        x: '0.000',
        y: '0.000',
        '$desktop_url': 'http://myappwebsite.com',
        '$ios_url': 'http://myappwebsite.com/ios',
        '$ipad_url': 'http://myappwebsite.com/ipad',
        '$android_url': 'http://myappwebsite.com/android',
        '$og_app_id': '12345',
        '$og_title': 'My App',
        '$og_description': 'My app\'s description.',
        '$og_image_url': 'http://myappwebsite.com/image.png'
    }
}, function(err, link) {
    console.log(err, link);
});

作为回报,你会得到一个类似的 URL http://myappname.app.link/iDdkwZR5hx,然后在点击链接后在应用程序内部,你会得到如下所示的内容:

{
    tags: [ 'tag1', 'tag2' ],
    channel: 'facebook',
    feature: 'dashboard',
    stage: 'new user',
    data: {
        x: '0.000',
        y: '0.000'
    }
}
于 2017-05-19T20:54:49.570 回答
5

为此,您必须使用工具->应用链接助手中的“应用链接助手”

然后检查您的链接,并在路径选择器中检查是否选择了“pathPrefix”选项。

然后在您的活动的 OnCreate 方法的底部(与您最近编辑的链接相关)添加以下代码:

Intent appLinkIntent = getIntent();
String appLinkAction = appLinkIntent.getAction();
Uri appLinkData = appLinkIntent.getData();
// then use appLinkData.getQueryParameter("YourParameter")

您可以使用“editConfigurations”选项对此进行测试和调试,只需打开该窗口并编辑您的 InstantApp 模块(使用您最近编辑的链接启动的模块)并在 URL 字段中添加您需要的 URL 参数。(然后只需运行该模块:D)

希望这会有所帮助。

于 2017-06-23T15:02:24.773 回答