Я занимаюсь разработкой приложения Android, в котором я использовал Firebase Password Authentication для входа в систему.
После того, как пользователи предоставят свою электронную почту и пароль, Я отправляю подтверждающее электронное письмо с использованием FirebaseAuth SDK.
/** SEND A VERIFICATION MAIL TO THE USER **/
ActionCodeSettings.Builder settingBuilder = ActionCodeSettings.newBuilder();
String url = getString(R.string.link_mail_verification);
settingBuilder.setUrl(url).setHandleCodeInApp(true);
ActionCodeSettings settings = settingBuilder.build();
user.sendEmailVerification(settings).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
Log.e("MAIL_VERIFICATION", "onComplete: mail verification sent" );
}else{
// not sent
}
}
});
При проверке своей электронной почты я хочу, чтобы пользователи быть перенаправленным непосредственно в приложение, если оно установлено, вот где я использовал Dynami c link
Сначала я начал с создания ссылки Dynami c в консоли Firebase
Во-вторых, я изменил шаблон электронной почты firebase, чтобы использовать мою динамическую ссылку c в качестве URL-адреса действия.
и в электронном письме, отправляемом пользователю, некоторые параметры запроса (например, oobCode, apiKey) добавляются к динамической ссылке c.
Когда пользователь щелкает по вышеуказанной ссылке, он правильно перенаправляет в приложение и открывает действие, зарегистрированное для получения динамических c ссылок.
Моя настоящая проблема в том, как я могу из приложения Android получить все параметры запроса, присутствующие в ссылке, отправленной пользователю.
Методы, которые я до сих пор пробовал, но они не работали: Метод 1: попытка получить запрос из Intent
FirebaseDynamicLinks.getInstance().getDynamicLink(getIntent()).addOnSuccessListener(new OnSuccessListener<PendingDynamicLinkData>() {
@Override
public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
Uri deepLink = null;
if(pendingDynamicLinkData != null){
deepLink = pendingDynamicLinkData.getLink();
}
// trying to get from the intent
if(deepLink != null){
Uri intentData = getIntent().getData();
if(intentData != null){
String code = getIntent().getStringExtra("oobCode"); // always returns null
}
}
}
});
Метод 2 : пытаюсь получить параметр запроса из PendingDynamicLinkData
FirebaseDynamicLinks.getInstance().getDynamicLink(getIntent()).addOnSuccessListener(new OnSuccessListener<PendingDynamicLinkData>() {
@Override
public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
Uri deepLink = null;
if(pendingDynamicLinkData != null){
deepLink = pendingDynamicLinkData.getLink();
}
// trying to get from the deep link URI
if(deepLink != null){
String code = deepLink.getQueryParameter("oobCode"); // returns null too
}
}
});
А вот мой манифест: xml
<activity
android:name=".activities.MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<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="@string/app_link_domain"
android:scheme="https"
/>
</intent-filter>
</activity>