Откройте мое приложение по ссылке

В моем приложении сервер отправляет эту ссылку: appname://[email protected]&token=asdf-asdf-asdf-xcfghfgh, но возможно ли получить такие значения, как email= [email protected] и token = sdfdkgdkgjgfd.

Пока я только добавил этот фильтр намерений в свой манифест, но приложение не вызывается:

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

                <data android:mimeType="text/plain" android:scheme="appname://"/>
            </intent-filter>

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


person Darko Petkovski    schedule 24.09.2015    source источник
comment
Позаботьтесь о правописании: имя приложения или имя приложения   -  person Henry    schedule 24.09.2015
comment
@Генри готово, спасибо за заметку   -  person Darko Petkovski    schedule 24.09.2015
comment
@DarkoPetkovski я отредактировал свой ответ с URL-адресом, который вы получаете.   -  person Eric B.    schedule 24.09.2015


Ответы (4)


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

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

                    <data android:mimeType="text/plain" android:scheme="https" 
                     android:host="api.myapp.com"
                     android:pathPrefix="/api/v2/verify"/>
       </intent-filter>

Intent intent = getIntent();
Uri data = intent.getData();
String email = data.getQueryParameter("email");
String token = data.getQueryParameter("token");
person Eric B.    schedule 24.09.2015

Схема в вашем фильтре должна быть просто appname, а не appname://

android:scheme="appname"
person drew    schedule 24.09.2015

попробуй это

    <activity
          android:name=".MainActivity"
          android:label="@string/title_activity_main" 
          android:exported="true">
        <intent-filter>
                        <action android:name="android.intent.action.MAIN" />
                        <category android:name="android.intent.category.LAUNCHER" />
                        <action android:name="android.intent.action.SEND"/>
                        <category android:name="android.intent.category.DEFAULT"/>

                        <data android:mimeType="text/plain" android:scheme="appname"/>
           </intent-filter>
</activity>

Чтобы получить параметр URL-адреса, напишите это в своей деятельности.

Uri data = getIntent().getData();
String scheme = data.getScheme(); 
String host = data.getHost(); 
List<String> params = data.getPathSegments();
String first = params.get(0); 
String second = params.get(1); 
person Kishan Vaghela    schedule 24.09.2015
comment
На самом деле я только что заметил, что это не та ссылка, которую я получаю, могу ли я разобрать эту: https://api.myapp.com/api/v2/[email protected]&token=1231-0444-44e0-bb69-4192fd0fec6b - person Darko Petkovski; 24.09.2015

Попробуй это:

<intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <data android:mimeType="text/plain" android:scheme="appname"/>
</intent-filter>

и ссылка в сети:

<a href="appname://[email protected]&token=asdf-asdf-asdf-xcfghfgh">

Получение данных в вашей деятельности:

// check if this intent is started via custom scheme link
Intent intent = getIntent();
String action = intent.getAction();
if (action != null && action.equals(Intent.ACTION_VIEW) {
   Uri uri = intent.getData();
   String scheme = uri.getScheme();
   if (scheme.equals("appname") {
      String email = uri.getQueryParameter("email");
      String token = uri.getQueryParameter("token");
   }
}
person Ander Acosta    schedule 24.09.2015
comment
и есть ли у вас какие-либо идеи, как я могу получить электронную почту и токен? - person Darko Petkovski; 24.09.2015
comment
На самом деле я только что заметил, что это не та ссылка, которую я получаю, могу ли я проанализировать эту: api.myapp.com/api/v2/‌​b69-4192fd0fec6b - person Darko Petkovski; 24.09.2015
comment
Хорошо, тогда измените свою схему на https. Для этого нет конфликта, если вы хотите использовать эту схему для других целей, вы можете убедиться, что хост является веб-узлом. if(uri.getHost() .equals("api.myapp.com") ... - person Ander Acosta; 24.09.2015