Как открыть определенную активность конкретного приложения, нажав на внешнюю ссылку? - PullRequest
0 голосов
/ 04 октября 2018

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

Но я не хочу, чтобы пользователь всегда вводил имя пользователя и пароль снова и снова, так что я просто делюсь URL-адресом с пользователем, и если пользователь нажимает на общую ссылку из любой точки телефона (по почте или через WhatsApp,или Facebook и т. д.) телефон должен предложить выбрать мое приложение, и приложение должно автоматически извлечь URL-адрес и напрямую перенаправить приложение на мой главный экран, нажав API входа в систему, если имя пользователя и пароль верны.

Общий URL будет выглядеть следующим образом - http://www.myurl.com/sso?username=Scb56745&password=!l0Aeu0yQazxssx

На данный момент мне удалось открыть диалоговое окно, используя этот код в моем файле AndroidManifest -

 <activity
         android:name="com.my.par.activities.UserActivity"
         android:label="@string/app_name"
         android:screenOrientation="portrait"
         android:windowSoftInputMode="stateHidden">
         <intent-filter android:autoVerify="true" tools:targetApi="m">
                    <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.myurl.com"
                        android:path="/sso"
                        android:scheme="http" />
                    <data
                        android:host="www.yoururl.com"
                        android:path="/sso1"
                        android:scheme="https" />
         </intent-filter>
 </activity>

Я получаю эту URL-ссылку по клику в методе getIntent () моей UserAcitivity, например:

Uri uri = getIntent().getData();
String path = uri.getPath();
  • Поэтому мой реальный вопрос заключается в том, как извлечь имя пользователя и пароль отдельно и чтобыЯ могу назвать свой логин api, отправив это имя пользователя и пароль с этого URL (например, http://www.myurl.com/sso?username=Scb56745&password=!l0Aeu0yQazxssx). - Готово

  • И как я могу поставитьдинамический URL или имя хоста, путь и схема в файле AndroidMenifest? - Готово

  • Как заставить наше приложение всегда напрямую открывать приложение, (нене нужно показывать диалоговое окно выбора), потому что его нельзя использовать, даже если пользователь нажмет на браузер, ничего не произойдет.

Удачное кодирование: -)

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Карзель тоже прав, но написано в Kotlin, я полагаю, что вы ожидаете решения для Java Я отвечу тем же в Java

Uri uri = getIntent().getData();
String strUsername = "", strPassword = "";
if (uri != null) {
   strUsername = uri.getQueryParameter("username");
   strPassword = uri.getQueryParameter("password");
}
else {
   // Your app will pop up even if http://www.myurl.com/sso is clicked, so better to handle null uri
}

Чтобы ответить на вашу следующую частьЧто касается динамического URL, вы можете иметь несколько intent-filters для этой цели

<activity
         android:name="com.my.par.activities.UserActivity"
         android:label="@string/app_name"
         android:screenOrientation="portrait"
         android:windowSoftInputMode="stateHidden">
         <intent-filter android:autoVerify="true" tools:targetApi="m">
                    <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.myurl.com"
                        android:path="/sso"
                        android:scheme="http" />
         </intent-filter>
         <intent-filter android:autoVerify="true" tools:targetApi="m">
                    <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.myurl.com"
                        android:path="/sso"
                        android:scheme="https" />
         </intent-filter>
         <intent-filter android:autoVerify="true" tools:targetApi="m">
                    <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.myurl.com"
                        android:path="/debug"
                        android:scheme="http" />
         </intent-filter>
 </activity>

и т. д.

Чтобы открыть свое приложение, нажав ссылку и не отображая диалоговое окно выбораВам придется использовать пользовательский URI, например:

syn3sthete://myurl.com/sso?username=Scb56745&password=!l0Aeu0yQazxssx

Вы можете изменить syn3sthete на любое другое значение, которое вы хотите.Не забудьте добавить intent-filter для своего пользовательского URI.

<intent-filter android:autoVerify="true" tools:targetApi="m">
                    <action android:name="android.intent.action.VIEW" />
                    <category android:name="android.intent.category.DEFAULT" />
                    <category android:name="android.intent.category.BROWSABLE" />
                    <data
                        android:host="myurl.com"
                        android:path="/sso"
                        android:scheme="syn3sthete" />
</intent-filter>
0 голосов
/ 04 октября 2018

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

fun getUsernameFromUrl(url: String): String? {
    return Uri.parse(url).getQueryParameter("username")
}
fun getPasswordFromUrl(url: String): String? {
    return Uri.parse(url).getQueryParameter("password")
}

И назовите его

val username = getUsernameFromUrl(path)

и т. Д.

ОБНОВЛЕНИЕ:

Единственный «динамический» способ добавления URL, который я знаю, - это использовать что-то вроде этого: https://developer.android.com/studio/build/manifest-build-variables вы можете изменить этот URL в зависимости от вашего варианта сборки.

Как сказано здесь: https://stackoverflow.com/a/43339476/8713068 вы не можете обновить Манифест Android напрямую из кода

...