Java 按下电子邮件链接后,如何使Android重定向到特定活动?
我需要我的Android应用程序在使用Firebase身份验证按下电子邮件链接时重定向到特定活动 我的应用程序当前重定向到启动器活动。我希望它重定向到profile活动,但在本例中我使用用户名活动。感谢您的帮助 我的代码: MainActivity.javaJava 按下电子邮件链接后,如何使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
@覆盖
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>