自定义Amazon Cognito的内置登录UI

时间:2018-07-18 15:06:44

标签: android amazon-web-services amazon-cognito

Amazon的Cognito移动版带有内置的UI,您可以在Web控制台上对其进行自定义,但是我听说除了这里提供的选项以外,还有更多可自定义的功能。

下面是我的身份验证活动,我相信将在其中进行自定义。该活动有效,并显示了Amazon的默认登录屏幕,但是我找不到对登录布局的任何引用。是否有人对定制UI有丰富的经验,是否可以通过编程方式进行?

public class AuthenticatorActivity extends Activity {

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

        // Add a call to initialize AWSMobileClient
        AWSMobileClient.getInstance().initialize(this, new AWSStartupHandler() {
            @Override
            public void onComplete(AWSStartupResult awsStartupResult) {
                SignInUI signin = (SignInUI) AWSMobileClient.getInstance().getClient(AuthenticatorActivity.this, SignInUI.class);
                signin.login(AuthenticatorActivity.this, MainNavigationActivity.class).execute();
            }
        }).execute();

        // Sign-in listener
        IdentityManager.getDefaultIdentityManager().addSignInStateChangeListener(new SignInStateChangeListener() {
            @Override
            public void onUserSignedIn() {
                Log.d("SignIn", "User Signed In");
            }

            // Sign-out listener
            @Override
            public void onUserSignedOut() {

                Log.d("SignIn", "User Signed Out");
                showSignIn();
            }
        });
        showSignIn();
    }

    /*
     * Display the AWS SDK sign-in/sign-up UI
     */
    private void showSignIn() {

        Log.d("SignIn", "showSignIn");

        SignInUI signin = (SignInUI) AWSMobileClient.getInstance().getClient(AuthenticatorActivity.this, SignInUI.class);
        signin.login(AuthenticatorActivity.this, MainNavigationActivity.class).execute();
    }
}

1 个答案:

答案 0 :(得分:1)

事实证明,对自定义的支持非常有限,此处概述了所有内容:https://docs.aws.amazon.com/aws-mobile/latest/developerguide/add-aws-mobile-user-sign-in-customize.html

  • 要显示“电子邮件和密码”用户SignInUI,请将userPools设置为true。
  • 要显示Facebook或Google用户SignInUI,请添加signInButton(FacebookButton.class)或 signInButton(GoogleButton.class)。
  • 要更改徽标,请使用logoResId。
  • 要更改背景颜色,请使用backgroundColor。
  • 要取消登录流程,请设置.canCancel(true)。
  • 要在登录视图中更改字体,请使用fontFamily方法并传入表示字体系列的字符串。
  • 要全屏绘制backgroundColor,请使用fullScreenBackgroundColor。

import android.app.Activity;

import android.graphics.Color;
import android.os.Bundle;
import com.amazonaws.mobile.auth.facebook.FacebookButton;
import com.amazonaws.mobile.auth.google.GoogleButton;
import com.amazonaws.mobile.auth.ui.AuthUIConfiguration;
import com.amazonaws.mobile.auth.ui.SignInUI;  
import com.amazonaws.mobile.client.AWSMobileClient;
import com.amazonaws.mobile.client.AWSStartupHandler;
import com.amazonaws.mobile.client.AWSStartupResult;

public class YourMainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    AWSMobileClient.getInstance().initialize(this, new AWSStartupHandler() {
        @Override
        public void onComplete(final AWSStartupResult awsStartupResult) {
            AuthUIConfiguration config =
                new AuthUIConfiguration.Builder()
                    .userPools(true)  // true? show the Email and Password UI
                    .signInButton(FacebookButton.class) // Show Facebook button
                    .signInButton(GoogleButton.class) // Show Google button
                    .logoResId(R.drawable.mylogo) // Change the logo
                    .backgroundColor(Color.BLUE) // Change the backgroundColor
                    .isBackgroundColorFullScreen(true) // Full screen backgroundColor the backgroundColor full screenff
                    .fontFamily("sans-serif-light") // Apply sans-serif-light as the global font
                    .canCancel(true)
                    .build();
            SignInUI signinUI = (SignInUI) AWSMobileClient.getInstance().getClient(YourMainActivity.this, SignInUI.class);
            signinUI.login(YourMainActivity.this, YourNextActivity.class).authUIConfiguration(config).execute();
        }
    }).execute();
}
}