Как открыть ссылку на приложение Android из веб-просмотра - PullRequest
1 голос
/ 27 марта 2020

У меня есть приложение, которое может обрабатывать ссылки на приложения.

Например, если у вас есть ссылка, такая как https://my-app-domain.com/something, и вы нажмете на нее, это запустит мое приложение.

Однако, если ссылка была отправлена ​​в приложении, которое открывает ссылки в веб-просмотре, мое приложение не будет запущено. Например, Facebook Messenger, Instagram и Snapchat - все открывают ссылки в своем собственном веб-просмотре, который переводит пользователя на мой сайт вместо запуска моего приложения.

Я пытаюсь сделать так, чтобы эта ссылка запускала мое приложение, даже если оно было отправлено в приложении, которое открывает ссылки в веб-просмотре.

Спасибо,

1 Ответ

0 голосов
/ 06 мая 2020

Как вы говорите, мессенджер 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>
...