Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按下电子邮件链接后,如何使Android重定向到特定活动?_Java_Android_Firebase Authentication_Deep Linking - Fatal编程技术网

Java 按下电子邮件链接后,如何使Android重定向到特定活动?

Java 按下电子邮件链接后,如何使Android重定向到特定活动?,java,android,firebase-authentication,deep-linking,Java,Android,Firebase Authentication,Deep Linking,我需要我的Android应用程序在使用Firebase身份验证按下电子邮件链接时重定向到特定活动 我的应用程序当前重定向到启动器活动。我希望它重定向到profile活动,但在本例中我使用用户名活动。感谢您的帮助 我的代码: MainActivity.java @覆盖 public void onEmailReadListener(字符串电子邮件){ ActionCodeSettings ActionCodeSettings=buildActionCodeSettings(); sendSignI

我需要我的Android应用程序在使用Firebase身份验证按下电子邮件链接时重定向到特定活动

我的应用程序当前重定向到启动器活动。我希望它重定向到profile活动,但在本例中我使用用户名活动。感谢您的帮助

我的代码:

MainActivity.java

@覆盖
public void onEmailReadListener(字符串电子邮件){
ActionCodeSettings ActionCodeSettings=buildActionCodeSettings();
sendSignInLink(电子邮件、动作码设置);
//StartActivityForResult(真,actionCodeSettings);
}
//电子邮件验证
公共操作代码设置buildActionCodeSettings(){
//[启动身份验证\u生成\u操作\u代码\u设置]
动作代码设置动作代码设置=
ActionCodeSettings.newBuilder()的
//您要重定向回的URL。此URL的域(www.example.com)
//URL必须在Firebase控制台中白名单。
.setUrl(“https://example.page.link/nYJz")      
//这一定是真的
.setHandleCodeInApp(真)
.setAndroidPackageName(
“com.example.AppName”,
false,/*installIfNotAvailable*/
“23”/*最小版本*/)
.build();
//[结束身份验证\u生成\u操作\u代码\u设置]
返回actionCodeSettings;
}
public void sendSignInLink(字符串电子邮件、ActionCodeSettings ActionCodeSettings){
//[在链接中启动身份验证发送签名]
FirebaseAuth auth=FirebaseAuth.getInstance();
auth.sendSignInLinkToEmail(电子邮件、操作码设置)
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
Log.d(标记“已发送电子邮件”);
}
否则{
Log.e(标记“onComplete:Failed=“+task.getException().getMessage());
}
}
});
//[在链接中结束授权发送签名]
}
AndroidManifest.xml


用户名活动

公共类UsernameActivity扩展了AppCompatActivity{
//为帐户创建用户名
//TODO禁用后退;创建取消按钮
//TODO使安德按钮按下下一步!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
按钮下一步;
文本输入文本用户名;
意向下一阶段;
弦乐博物馆名称;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u用户名);
next=findviewbyd(R.id.nextOne);
next.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(checkUsername()==true){
mUsername=username.getText().toString();
nextPass.putExtra(“用户名”,mUsername);
startActivity(nextPass);
}
否则{
Toast.makeText(getApplicationContext(),“无效用户名”,Toast.LENGTH_LONG.show();
}
}
});
nextPass=新意图(UsernameActivity.this、PasswordActivity.class);
}
公共布尔校验用户名(){
Log.v(“用户0”、“0”);
username=findviewbyd(R.id.username);
int j;
字符串strUsername=username.getText().toString();
Log.v(“用户1”,结构名称);

如果(strUsername.length()>=6&&strUsername.length()清单中的
数据
标记应如下所示



您必须确保
android:host
主机
完全匹配,没有任何
方案
(例如
https
)或
前缀
(例如
/something
)。

清单中的
数据
标记应该是这样的



您必须确保
android:host
主机
完全匹配,没有任何
方案
(如
https
)或
前缀
(如
/something
).

你能发布
UsernameActivity
的代码吗?这有点不寻常,我想你可能因为某些原因打开了
main活动condition@Nizar我上传了UsernameActivity,你对它可能是什么情况有什么想法吗?我会检查一下,老实说,我需要自己尝试一下,没有什么比这更好的了这似乎是错误的……您是否试图通过应用程序本身的DeepLink从Main活动转到UserNameActivity?@Nizar否,向用户发送一个电子邮件链接,将他们带回应用程序中的特定活动,当前设置为username活动。不幸的是,它没有将他们发送到username活动,it将它们发送到launcher活动,这是我所读到的深度链接的基本行为,但是如果我使用意图过滤器,正如我所理解的那样,它应该会引导我到username活动。我想我知道问题出在哪里,我只想先测试它。但是,你能分享
AndroidManifest
,我很好奇它是否有任何
深度链接
你能发布
UsernameActivity
的代码吗?这有点不寻常,我想你可能是因为某些原因打开了
MainActivity
condition@Nizar我上传了UsernameActivity,你知道它可能是什么情况吗?我会的稍微检查一下,老实说,我需要自己尝试一下,这似乎没有什么错……你是想用Dee从main活动转到username活动吗
@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]
}
<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>
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;

}
<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>