2013-11-25 2 views
24

я попробовал link1, link2, link3, link4, link5, link6Проблема с глубоким связыванием Android! Как использовать собственный URL схемы MyApp: // some_data

Вот все описанное о DeepLinking

Что я хочу обычай URI MyApp:// some_data, открывает собственное приложение, установленное на устройстве, для которого требуется инициализировать приложение some_data.

Существует 2 сценария, в которых можно щелкнуть пользовательский URL-адрес.

1) внутри SMS приложения, когда пользователь нажимает на ссылку она должна автоматически открыть установленный в противном случае открыть магазин googleplay где приложение организовано

2) внутри тела сообщения электронной почты.

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

Вот мой AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="18" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="MainActivity" 
     android:label="@string/app_name" 
     android:exported="true" > 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 

      <category android:name="android.intent.category.BROWSABLE" /> 
      <category android:name="android.intent.category.DEFAULT" /> 

      <data android:scheme="inderbagga" /> 
     </intent-filter> 
    </activity> 
</application> 

и вот MainActivity.java

TextView tvText=(TextView)findViewById(R.id.tvid); 

    if (getIntent().getAction() == Intent.ACTION_VIEW&&getIntent().getScheme().equals("inderbagga")) { 
     Toast.makeText(getApplicationContext(), ""+getIntent().getScheme(), Toast.LENGTH_SHORT).show(); 
     Uri uri = getIntent().getData(); 
     // do stuff with uri 
     tvText.setText(uri.toString()); 
    } 
    else tvText.setText("NULL"); 

Чтобы быть более конкретным, я хочу, чтобы открыть собственное приложение когда u url типа inderbagga: // нажата кнопка a1b22c333, либо из приложения sms-приложения, либо из сообщения электронной почты gmail/yahoomail.

, чтобы достичь того же, я использовал фильтры намерения для установки схемы. и getIntent() для чтения данных, равных a1b22c333 в MainActivity.

+0

«Никто из них не работает для меня» - это не очень полезно. «У меня проблема со схемой» - это тоже не очень полезно. Пожалуйста, отредактируйте свой вопрос, чтобы объяснить, в deatil, какие * конкретные * проблемы, с которыми вы сталкиваетесь. – CommonsWare

+0

Вы хотите открыть приложение, набрав URL-адрес в браузере, правильно? – prakash

+2

@commonsware: спасибо за предложение! – inderbagga

ответ

8

Чтобы быть более конкретным, я хочу, чтобы открыть собственное приложение, когда и URL типа inderbagga: // a1b22c333 нажат, либо из приложения смс или Gmail/Yahoomail тела сообщения электронной почты.

Для Android доступно множество приложений для SMS и электронной почты. Точно никто из них не знает, как конвертировать inderbagga://a1b22c333 в интерактивные записи. Вы можете составить список всех этих приложений, связаться с каждой из их групп разработчиков и попросить их добавить его.

Или вы могли бы использовать свое приложение для определенного URL-адреса http://. Хотя пользователю будет предложен выборщик, чтобы просмотреть этот URL-адрес в вашем приложении или в веб-браузере, по крайней мере, он будет доступен для просмотра.

+2

plesae взгляните на эту ссылку, http://en.wikipedia.org/wiki/Mobile_deep_linking facebook, twitter, ebay, youtube уже делает это. inderbagga - это не что иное, как обычное значение схемы, я видел в ссылках, о которых я упоминал, что люди уже используют пользовательские схемы, такие как inderbagga

+4

Это еще один вспомогательный учебник sir https: // www.sparq.it/web/api/v1/docs/mobile_uris#deep_linking и http://www.deeplink.me/documentation. должен быть способ добиться этого. но он не работает в моем случае. Я делаю это неправильно. это может быть так! – inderbagga

+0

Посмотрите на Linkify.java и посмотрите, как inderbagga: // может сделать автоматическую ссылку (URLSpan) в TextView – pskink

15

нажмите ссылку означает, что этот код будет работать

  <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="domain.com(google.com)"android:pathPrefix="/wp/poc1/(sufexes)" /> 

    </intent-filter> 

прибудет URL-адрес данных

 //get uri data 
    Uri data = getIntent().getData(); 
    //get schma 
    String scheme = data.getScheme(); // "http" 
    //get server name 
    String host = data.getHost(); // Ipaddress or domain name 
    //get parameter 
    String urltextboxname=data.getQueryParameter("name"); 
    //set value in textview 
    name.setText(urltextboxname); 
+1

этот блок кода не будет работать, мне нужна специальная схема ... не http-материал. – inderbagga

+0

Только теперь я увидел ваш ответ, но «схема» может быть обычаем, вы можете определить, что вам больше всего подходит. Но я думаю, вы могли бы узнать, что через 2 года :) –

2

Вы также можете попробовать эту библиотеку, которая облегчает объявляющую глубокие ссылки и извлечение из параметров, нужно:

https://github.com/airbnb/DeepLinkDispatch

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

0

Похоже, проблема, с которой вы сталкиваетесь, заключается в том, что ваш клиент электронной почты и SMS не правильно разбирает схему и путь URI. Большинство из них не позволяют вам напрямую вводить схему URI. Кроме того, если приложение не установлено, вам необходимо отступить в Play Store, чтобы пользователь получил хороший опыт.

Для этого вам необходимо вызвать схему URI на стороне клиента JS. Вы можете настроить простой веб-хостинг и использовать этот скрипт:

<script type="text/javascript"> 
    window.onload = function() { 
     var method = 'iframe'; 
     var fallbackFunction = function() { 
      if (method == 'iframe') { 
       window.location = "market://details?id=your.package.name"; 
      } 
     }; 
     var addIFrame = function() { 
      var iframe = document.createElement("iframe"); 
      iframe.style.border = "none"; 
      iframe.style.width = "1px"; 
      iframe.style.height = "1px"; 
      iframe.src = "inderbagga://a1b22c333"; 
      document.body.appendChild(iframe); 
     }; 
     var loadChromeIntent = function() { 
      method = 'intent'; 
      document.location = "intent://a1b22c333#Intent;scheme= inderbagga;package=your.package.name;end"; 
     }; 
     if (navigator.userAgent.match(/Chrome/) && !navigator.userAgent.match("Version/")) { 
      loadChromeIntent(); 
     } 
     else if (navigator.userAgent.match(/Firefox/)) { 
      window.location = "inderbagga://a1b22c333"; 
     } 
     else { 
      addIFrame(); 
     } 
     setTimeout(fallbackFunction, 750); 
    }; 
</script> 

Или, вы можете использовать услугу, как branch.io, который автоматически собирает эту сторону клиента JS для вас в дополнении к работе на рабочем столе и прошивке, а также.

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