2011-02-10 4 views
13

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

Я частично отработал несколько разных способов, но нашел несколько проблем, о которых мне было интересно, есть ли у кого-нибудь решения.

Попытка 1: Использование пользовательской схемы: myapp: // someItem. Это работает, но некоторые приложения электронной почты не рассматривают это как ссылку, поскольку это не http. Есть ли способ заставить приложения рассматривать его как действительную ссылку? например, gmail.

Попытка 2: Использование ссылки http с ведущим: http://com.myapp/someItem. Это работает также, но мое приложение заканчивается зарегистрированным, чтобы обрабатывать все HTTP-ссылки, которые не идеальны.

Попытка 3: Использование ссылки http с хостом и портом: http://com.myapp:2345/someItem. Это мое текущее решение, единственным недостатком которого является то, что при открытии ссылки он по-прежнему дает возможность открыть ссылку в браузере. Есть ли способ остановить браузер, пытающийся открыть мои ссылки?

У кого-нибудь есть способ сделать ссылки, которые будут обрабатываться как ссылки всеми приложениями, а также игнорировать браузер при их открытии?

+0

Можете ли вы указать мне на некоторые ресурсы, которые помогают мне - «как включить глубокие ссылки для App Content» - Глубинная ссылка должна принять пользователь непосредственно к содержанию, без какого-либо промежуточных страниц, или логинов , – user2056563

ответ

4

Этот метод на самом деле, кажется, работает на Android от того, что я могу сказать:

http://mobile.dzone.com/news/custom-url-schemes-phonegap

Я не пробовал в реальном приложении производства, поэтому ваш пробег может отличаться. То, что я сделал, это использование этой технологии создания скрытого iframe и попытка установить местоположение в пользовательскую схему URL-адреса и вызвать функцию из onload для документа. То, что я видел до сих пор (я только проверял его на устройствах 2.2 и 2.3), заключается в том, что если у меня установлено приложение, которое обрабатывает пользовательскую схему, приложение запустится, и если не будет отображаться страница.

Относительно чистый одиночный URL-адрес, охватывающий оба случая, и не разрушает такие вещи, как щебетать по URL-адресу. Реальная производственная версия может делать только скрытый iframe-зонд, если запрос исходит из того, что выглядит как платформа, которая может поддерживать приложение, чтобы снизить риск несовместимого поведения на рабочем столе.

+1

Я работаю на 90%. Единственное, что мне не нравится, это то, что он оставляет страницу в браузере. Я хотел бы, чтобы он вернулся на 1 страницу успеха и остался там, где он не смог отобразить ссылку для скачивания. Вы нашли какой-либо способ проверить, работает ли перенаправление? – skorulis

+1

Извините, но я не обманывал его, чтобы оптимизировать историю и все такое, просто проверил основы. Обычно вы можете запускать с флагом истории без намерения позаботиться о проблеме, оставив страницу в браузере. Но поскольку «что-то еще» запускает его, я не уверен, как вы собираетесь найти исправление. Удачи! Счастливые основы работают как минимум. – mikerowehl

0

Если вы можете использовать что-то серверное, возможно, у вас может быть обычная страница, которая переходит на ссылку пользовательской схемы из браузера при посещении? Это имеет дополнительное преимущество, возможно, возможность определить, установлено ли приложение и запросить установку.

Это не устраняет проблему открытия ссылок в браузере. Единственное истинное решение, о котором я могу думать, - это обработчик ссылок, который перескакивает в соответствующее приложение. Тогда этот вопрос будет позволяет пользователю изменять предпочтительный браузер ...

+0

Как я могу проверить браузер, если приложение было установлено? – skorulis

+0

О, я об этом не думал. Я не знаю, есть ли простой способ сделать это. По крайней мере, будет доступна страница с кликом. ; Возможно, вы можете запустить службу HTTP-сервера в приложении, а затем использовать это для обнаружения присутствия приложения? Это все, что я могу придумать в данный момент. –

4

Чтобы ответить на ваши вопросы, ниже показан образец фильтра намерений в манифесте.

<intent-filter> 
    <action android:name="android.intent.action.VIEW"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
    <category android:name="android.intent.category.BROWSABLE"/> 
    <data 
     android:host="www.example.com" 
     android:pathPrefix="/home" 
     android:scheme="https"/> 
</intent-filter> 

Так в основном, когда кто-то нажимает на любую ссылку, начиная с http://www.example.com/home, он/она будет предоставлена ​​возможность открыть его с приложением вместе с приложениями браузера. Вы должны обработать намерение в своей деятельности

Также схема может быть любой, но http-схема рекомендуется Google, так что ваше приложение и приложение-браузер могут прослушивать клики на отключенном URL-адресе.

Примечание. Не забудьте добавить в свои веб-страницы приложение android-app: // yourpackage name/http/www.example.com/home/..., если вы хотите связать приложение.

1
1:-set Custom URL schemes like http://example.com. 
    For example, the URL http://example.com/?id=95 , 
    will open up the relevant FAQ and the URL 
    http://example.com/?sectionid=8 
    (where sectionid is the publish id of any Section), 
    will open up relevant section. 
2:- <activity android:name="com.example.shilpi.deeplinkingsample.DeepLinkActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.VIEW" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.BROWSABLE" /> 
       <data android:scheme="http" android:host="example.com"/> 
      </intent-filter> 
     </activity> 
3:-   @Override 
      protected void onResume() { 
       super.onResume(); 

       Intent in = getIntent(); 
       Uri data = in.getData(); 
       System.out.println("deeplinkingcallback :- "+data); 
      } 
+2

Хотя этот ответ может быть технически корректным, было бы целесообразно отложить ответ, объяснив, что он делает. Это поможет как OP, так и будущим посетителям. Как бы то ни было, это всего лишь свалка кода. – Bugs

Смежные вопросы