Как заставить Android перенаправить на конкретную c активность после нажатия на ссылку электронной почты? - PullRequest
1 голос
/ 20 января 2020

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

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

Мой код:

MainActivity. java

@Override
public void onEmailReadListener(String email) {

    ActionCodeSettings actionCodeSettings =  buildActionCodeSettings();
    sendSignInLink(email, actionCodeSettings);
    //StartActivityForResult(true, actionCodeSettings);

}

//Email Verification
public ActionCodeSettings buildActionCodeSettings() {
    // [START auth_build_action_code_settings]
    ActionCodeSettings actionCodeSettings =
            ActionCodeSettings.newBuilder()
                    // URL you want to redirect back to. The domain (www.example.com) for this
                    // URL must be whitelisted in the Firebase Console.
                    .setUrl("https://example.page.link/nYJz")      
                    // This must be true
                    .setHandleCodeInApp(true)
                    .setAndroidPackageName(
                            "com.example.AppName",
                            false, /* installIfNotAvailable */
                            "23"    /* minimumVersion */)
                    .build();
    // [END auth_build_action_code_settings]

    return actionCodeSettings;
}

    public void sendSignInLink(String email, ActionCodeSettings actionCodeSettings) {
    // [START auth_send_sign_in_link]
    FirebaseAuth auth = FirebaseAuth.getInstance();
    auth.sendSignInLinkToEmail(email, actionCodeSettings)
            .addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "Email sent.");
                    }
                    else{
                        Log.e(TAG, "onComplete: Failed=" + task.getException().getMessage());
                    }
                }
            });
    // [END auth_send_sign_in_link]
}

AndroidManifest . xml

<activity android:name=".Activities.Login.UserCreation.UsernameActivity">

        <intent-filter android:autoVerify="true">
            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT"/>
            <action android:name="android.intent.action.VIEW"/>
            <data android:host="atlas-cd0f2.firebaseapp.com/" android:scheme="https" />
            <data android:host="https://example.page.link/" android:scheme="https" />
        </intent-filter>

 </activity>

Имя пользователяActivity

public class UsernameActivity extends AppCompatActivity {

//create username for account
//TODO disable back; create cancel button
//TODO make ender button press next!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Button next;
TextInputEditText username;
Intent nextPass;
String mUsername;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_username);

    next = findViewById(R.id.nextOne);
    next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

                if (checkUsername() == true) {

                    mUsername = username.getText().toString();
                    nextPass.putExtra("username", mUsername);
                    startActivity(nextPass);

                }

                else {

                    Toast.makeText(getApplicationContext(), "Invalid Username", Toast.LENGTH_LONG).show();

                }

            }

        });

    nextPass = new Intent(UsernameActivity.this, PasswordActivity.class);

}

public boolean checkUsername() {

    Log.v("user0", "0");

    username = findViewById(R.id.username);

    int j;

    String strUsername = username.getText().toString();

    Log.v("user1", strUsername);

    if (strUsername.length() >= 6 && strUsername.length() <= 30){

        Log.v("user2", "2");

        char[] chUsername = strUsername.toCharArray();

        char[] badChar = {'&', '=', '_', '\'', '-', '+', ',', '<', '>', '.'};

        for (int i = 0; i < chUsername.length; i++) {
            Log.v("user3", String.valueOf(i));
            Log.v("user3.2", String.valueOf(chUsername[i]));

            for (j = 0; j < badChar.length; j++) {
                Log.v("user3.5", String.valueOf(j));

                if (chUsername[i] == badChar[j]) {

                    Log.v("user4", String.valueOf(j));
                    Log.v("user5", String.valueOf(i));

                    j = 0;
                    Log.v("user6", String.valueOf(j));
                    return false;

                }

            }

        }

        return true;

    }
    Log.v("user8", "8");

    return false;

}

}

StartActivity в AndroidManifest Это действие с обозначением пусковой установки

<activity android:name=".Activities.Login.StartActivity">
        <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>
    </activity>

1 Ответ

0 голосов
/ 23 января 2020

Теги data в Манифесте должны выглядеть следующим образом

<data
    android:host="example.page.link"
    android:scheme="https" />
<data
    android:host="atlas-cd0f2.firebaseapp.com"
    android:scheme="https" />

Вы должны убедиться, что android:host точно соответствует host, без каких-либо scheme ( например https) или prefix (например, /something) .

...