我有一个可以处理应用程序链接的应用程序。
例如,如果您有一个链接,例如https://my-app-domain.com/something你点击它,它就会启动我的应用程序。
但是,如果链接是在一个在网络视图中打开链接的应用程序中发送的,我的应用程序将不会启动。例如,Facebook Messenger、Instagram和Snapchat都在自己的网络视图中打开链接,将用户带到我的网站,而不是启动我的应用程序。
我想做的是让这个链接启动我的应用程序,即使它是在网络视图中打开链接的应用程序中发送的。
谢谢,
就像你说的,Facebook信使不处理应用程序链接/通用链接。
我一直在尝试,它似乎是自定义uri方案风格的链接(我的-app://something)工作。您所能做的就是在https://my-app-domain.com/something它试图将浏览器重定向到您的自定义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,你会有这种恶心的黑客行为。
<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>