Как вы говорите, мессенджер Facebook не обрабатывает ссылки на приложения / универсальные ссылки.
Я немного экспериментировал, и это похоже на пользовательские ссылки в стиле схемы URI (my-app: // что-то) Работа. Что вы можете сделать, так это реализовать веб-откат на 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. Я использую реагировать нативно, и там я добавил следующее в свой 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];
}
А затем укажите схему URI в Info.plist:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>my-app</string>
</array>
</dict>
</array>