Подтвердить что ты не робот

Facebook глубокая ссылка на Android

Я пытаюсь реализовать функцию Facebook Deep Linking в своем приложении и столкнулся со следующим сценарием:

У меня есть функция MainActivity, которая объявляется так:

    <activity
        android:name="com.mypackage.android.MainActivity">

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Эта активность + имя моего пакета также объявляется в настройках моего приложения на веб-сайте разработчика facebook.

Как только ссылка нажимается на приложение Facebook, я должен обрабатывать это событие с помощью метода onCreate моей деятельности. Следующий код обрабатывает событие:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Uri target = getIntent().getData();

        if (target != null){
          // got here via Facebook deep link
          // once I'm done parsing the URI and deciding
          // which part of my app I should point the client to
          // I fire an intent for a new activity and
          // call finish() the current activity (MainActivity)
        }else{
          // activity was created in a normal fashion
        }
    }

Все идет согласно плану, за исключением следующего сценария:

  • Пользователь запустил мое приложение
  • Создана MainActivity.
  • Создана вторичная активность
  • MainActivity завершена
  • Приложение переходит в фоновое изображение с помощью кнопки устройства.
  • Глубокая ссылка попадает в приложение Facebook.

В этом случае мое приложение снова переходит на передний план, но MainActivity onCreate/onNewIntent не вызывается, вместо этого SecondaryActivity onResume() вызывается и восстанавливается Последнее состояние.

Примечание. Я протестировал эту проблему на Samsung Nexus с Android 4.2.1 и получил этот результат, хотя при тестировании на Galaxy S1 с Android 2.3.5 он работал, как я и ожидал.

Любая помощь будет принята с благодарностью, Спасибо.

4b9b3361

Ответ 1

Facebook запускает ваше приложение из своего собственного приложения, явно запустив свой "MainActivity" (тот, который вы предоставили на странице разработчика).

тем самым: поведение Android по умолчанию: если приложение уже выполняется, повторный вызов startActivity() не запускает новую задачу с нуля, но восстанавливает только переднюю задачу уже запущенной задачи.

но хорошая новость заключается в том, что вы можете изменить это поведение по умолчанию, добавив в свой MainActivity android:launchMode="singleTask". это определение:

система создает новую задачу и запускает действие в корне новой задачи. Однако, если экземпляр активности уже существует в отдельной задаче, система перенаправляет намерение на существующий экземпляр посредством вызова его метода onNewIntent() вместо создания нового экземпляра. Только один экземпляр действия может существовать одновременно.

с этого момента вы всегда можете ответить на исходное намерение, и с этой точки вы всегда можете вернуться к задаче, которая уже была в фоновом режиме (если существует), перезапустив активность с помощью обоих флагов Intent.FLAG_ACTIVITY_SINGLE_TOP && Intent.FLAG_ACTIVITY_CLEAR_TOP комбинация

Ответ 3

Вам нужно иметь больше информации в вашем фильтре намерений:

<intent-filter>
   <action android:name="android.intent.action.VIEW"></action>
   <category android:name="android.intent.category.DEFAULT"></category>
   <category android:name="android.intent.category.BROWSABLE"></category>
   <data android:host="www.yoursite.com" android:scheme="http"></data>
</intent-filter>

Это приведет к захвату ссылок, идущих на ваш сайт (обязательно измените URL-адрес), и направьте их на любой вид деятельности, который вы определяете в этом объекте.