繁体   English   中英

如何从 webview 打开 Android 应用程序链接

[英]How to open an Android App link from a webview

我有一个可以处理应用程序链接的应用程序。

例如,如果您有一个链接(例如https://my-app-domain.com/something)并单击它,它将启动我的应用程序。

但是,如果链接是在一个在 web 视图中打开链接的应用程序中发送的,我的应用程序将不会启动。 例如,Facebook Messenger、Instagram 和 Snapchat 都在他们自己的网页视图中打开链接,将用户带到我的网站而不是启动我的应用程序。

我想要做的是让这个链接启动我的应用程序,即使它是在一个在 web 视图中打开链接的应用程序中发送的。

谢谢,

就像你说的,Facebook Messenger 不处理应用程序链接/通用链接。

我一直在尝试,似乎自定义 uri 方案样式链接(my-app://something)工作。 您可以做的是在https://my-app-domain.com/something上实现 Web 回退,它会尝试将浏览器重定向到您的自定义 uri,如果这不起作用,则显示一个不错的网页。 这就是 Spotify 等大公司的做法。

在 Android 上,您可以通过指定多个意图过滤器来支持应用程序链接和自定义 uri 方案;

    <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="my-app-domain"
            android:pathPrefix="/something" />
    </intent-filter>
    <!-- Google claims that one intent-filter can handle multiple <data> elements, this seems to be untrue however -->
    <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="my-app" />
    </intent-filter>

然后在https://my-app-domain.com/something上的 Web 回退中,您会遇到这种令人作呕的黑客攻击。

<script>
    window.location = 'my-app://something'
    // optional secondary fallback
    setTimeout(() => {window.location = 'https://secondary-fallback'}, 1000)
</script>

结果是,如果您安装了应用程序,您最终会按预期进入您的应用程序,但如果没有,您最终会进入您的辅助后备页面。

同样的原理也适用于 iOS。 我正在使用 react native,并且在 AppDelegate.m 中添加了以下内容:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
 sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
  return [RCTLinkingManager application:application openURL:url
                  sourceApplication:sourceApplication annotation:annotation];
}

然后在 Info.plist 中指定一个 uri 方案:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>my-app</string>
        </array>
    </dict>
</array>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM