Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.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
如何在android中设置cognito身份池?_Android_Amazon Web Services_Android Studio_Aws Sdk_Amazon Cognito - Fatal编程技术网

如何在android中设置cognito身份池?

如何在android中设置cognito身份池?,android,amazon-web-services,android-studio,aws-sdk,amazon-cognito,Android,Amazon Web Services,Android Studio,Aws Sdk,Amazon Cognito,我对aws cognito完全陌生,这些指南到处都是,我有点迷路了。在我的aws帐户中,我创建了一个身份池,现在我想尝试从我的android应用程序创建一个新用户,但它无法创建用户或无法连接到cognito池。我不确定我是否在写这篇文章,希望得到你的指导 这是我到目前为止所拥有的 public class aws extends AppCompatActivity { private EditText firstName,lastName,email,password; priv

我对aws cognito完全陌生,这些指南到处都是,我有点迷路了。在我的aws帐户中,我创建了一个身份池,现在我想尝试从我的android应用程序创建一个新用户,但它无法创建用户或无法连接到cognito池。我不确定我是否在写这篇文章,希望得到你的指导

这是我到目前为止所拥有的

public class aws extends AppCompatActivity
{
    private EditText firstName,lastName,email,password;
    private Button loginButton;
    private String poolId,clientId,clientSecret;
    CognitoUserPool userPool;
    CognitoUserAttributes userAttributes;
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        CognitoCachingCredentialsProvider credentialsProvider = new
                CognitoCachingCredentialsProvider(
                getApplicationContext(), // Context
                "IDENTITY POOL_ID", // Identity Pool ID
                MY_REGION // Region
        );
        CognitoSyncManager syncClient = new CognitoSyncManager(
                getApplicationContext(), // Context
                MY_REGION, // Region
                credentialsProvider
        );
        Dataset dataset = syncClient.openOrCreateDataset("myDataset");
        dataset.put("myKey", "myValue");
        dataset.synchronize(new DefaultSyncCallback() {
            @Override
            public void onSuccess(Dataset dataset, List newRecords) {
                //Your handler code here
            }
        });

        poolId = "MY_POOL_ID";
        clientId = "MY_CLIENT_ID";
        clientSecret = "MY_CLIENT_SECRET";
        ClientConfiguration clientConfiguration = new ClientConfiguration();
        // Create a CognitoUserPool object to refer to your user pool
        userPool = new CognitoUserPool(getBaseContext(), poolId, clientId, clientSecret, clientConfiguration);

        bindActivity();
    }
    private void bindActivity()
    {
        firstName = (EditText) findViewById(R.id.register_firstNameET);
        lastName = (EditText) findViewById(R.id.register_lastNameET);
        email = (EditText) findViewById(R.id.register_emailET);
        password = (EditText) findViewById(R.id.register_passwordET);
        loginButton = (Button) findViewById(R.id.intro_register_zivit_button);
        loginButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                setUpCognito();
            }
        });
    }
    private void setUpCognito()
    {
        // Create a CognitoUserAttributes object and add user attributes
         userAttributes = new CognitoUserAttributes();
        // Add the user attributes. Attributes are added as key-value pairs

        // Adding user's given name.
        // Note that the key is "given_name" which is the OIDC claim for given name
        userAttributes.addAttribute("given_name", firstName.getText().toString());

        // Adding user's lastName
        userAttributes.addAttribute("family_Name", lastName.getText().toString());
        // Adding user's email address
        userAttributes.addAttribute("email", email.getText().toString());

        setUpCognitoHandler();

    }

    private void setUpCognitoHandler()
    {
        SignUpHandler signupCallback = new SignUpHandler() {

            @Override
            public void onSuccess(CognitoUser cognitoUser, boolean userConfirmed, CognitoUserCodeDeliveryDetails cognitoUserCodeDeliveryDetails)
            {
                Log.d("myCognito","sign up succeeded!");
                // Sign-up was successful

                // Check if this user (cognitoUser) needs to be confirmed
                if(!userConfirmed)
                {
                    Log.d("myCognito","not confirmed! Need to confirm");
                    confirmUser();
                    // This user must be confirmed and a confirmation code was sent to the user
                    // cognitoUserCodeDeliveryDetails will indicate where the confirmation code was sent
                    // Get the confirmation code from user
                }
                else {
                    Log.d("myCognito","confirmed!");
                    // The user has already been confirmed
                }
            }

            @Override
            public void onFailure(Exception exception)
            {
                Log.d("myCognito","sign up failed!");
                // Sign-up failed, check exception for the cause
            }
        };
        userPool.signUpInBackground("user1ID", password.getText().toString(), userAttributes, null, signupCallback);
    }

    private void confirmUser()
    {
        // Callback handler for confirmSignUp API
        GenericHandler confirmationCallback = new GenericHandler() {

            @Override
            public void onSuccess() {
                // User was successfully confirmed
                Log.d("myCognito","Confirmed User Success!");
            }

            @Override
            public void onFailure(Exception exception) {
                // User confirmation failed. Check exception for the cause.
                Log.d("myCognito","Confirmed User faileure :(");
            }
        };
    }
}
我再一次对如何创建这个类感到困惑,当我使用mobile hub时,示例应用程序中到处都是代码。

试试这个文档

在Mobile hub中查找此文件
CognitoUserPoolsSignInProvider

它包含了登录工作的所有细节

下面是authentication处理程序(我已经注释了一些东西来删除错误)

这是onClick侦听器

@Override
    public View.OnClickListener initializeSignInButton(final Activity signInActivity,
                                                       final View buttonView,
                                                       final IdentityManager.SignInResultsHandler resultsHandler) {

        this.activity = signInActivity;
        this.resultsHandler = resultsHandler;

        // User Pools requires sign in with the username or verified channel.
        // Mobile Hub does not set up email verification because it requires SES verification.
        // Hence, prompt customers to login using the username or phone number.
        final EditText emailField = (EditText) activity.findViewById(EDIT_TEXT_USERNAME_ID);
        emailField.setHint(R.string.button_text_sign_in);


        final View.OnClickListener listener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                username = ViewHelper.getStringValue(activity, EDIT_TEXT_USERNAME_ID);
                password = ViewHelper.getStringValue(activity, EDIT_TEXT_PASSWORD_ID);

                final CognitoUser cognitoUser = cognitoUserPool.getUser(username);

                cognitoUser.getSessionInBackground(authenticationHandler);
            }
        };

        buttonView.setOnClickListener(listener);
        return listener;
    }

还可以尝试此github示例代码
@Override
    public View.OnClickListener initializeSignInButton(final Activity signInActivity,
                                                       final View buttonView,
                                                       final IdentityManager.SignInResultsHandler resultsHandler) {

        this.activity = signInActivity;
        this.resultsHandler = resultsHandler;

        // User Pools requires sign in with the username or verified channel.
        // Mobile Hub does not set up email verification because it requires SES verification.
        // Hence, prompt customers to login using the username or phone number.
        final EditText emailField = (EditText) activity.findViewById(EDIT_TEXT_USERNAME_ID);
        emailField.setHint(R.string.button_text_sign_in);


        final View.OnClickListener listener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                username = ViewHelper.getStringValue(activity, EDIT_TEXT_USERNAME_ID);
                password = ViewHelper.getStringValue(activity, EDIT_TEXT_PASSWORD_ID);

                final CognitoUser cognitoUser = cognitoUserPool.getUser(username);

                cognitoUser.getSessionInBackground(authenticationHandler);
            }
        };

        buttonView.setOnClickListener(listener);
        return listener;
    }