简体   繁体   English

如何将Facebook用户添加到AWS Cognito? -安卓

[英]How to add facebook user to aws cognito? - android

I am a bit confused. 我有点困惑。 I was able to set up Facebook login button using facebook sdk. 我能够使用facebook sdk设置Facebook登录按钮。 Next, I wanted to add the user into cognito, but the guide told me to do this: 接下来,我想将用户添加到cognito中,但是指南告诉我要这样做:

Map<String, String> logins = new HashMap<String, String>();
logins.put("graph.facebook.com", AccessToken.getCurrentAccessToken().getToken());
credentialsProvider.setLogins(logins);

I did that, and I don't see the user incognito. 我这样做了,但我看不到用户隐身。 I'm confused, what does "federated authentication" mean? 我很困惑,“联合身份验证”是什么意思? What I'm trying to accomplish is: 我想要完成的是:

1.User registers via Facebook 2.Once the facebook login is success, I want to add that user into cognition. 1.用户通过Facebook注册2.一旦Facebook登录成功,我想将该用户添加到认知中。

This is my current code: 这是我当前的代码:

    private void setFacebookButton()
    {
        Log.d("MY_FACEBOOK","setting up callbackManager");
        callbackManager = CallbackManager.Factory.create();
        loginButton.setReadPermissions("user_friends");
        loginButton.setReadPermissions("public_profile");
        loginButton.setReadPermissions("email");
        loginButton.setReadPermissions("user_birthday");
        // If using in a fragment
        loginButton.setFragment(this);
        // Callback registration

        LoginManager.getInstance().registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        Log.d("MY_FACEBOOK","login success!");
                        Map<String, String> logins = new HashMap<String, String>();
                        logins.put("graph.facebook.com", AccessToken.getCurrentAccessToken().getToken());
                        SetLoginsAsyncTask loginsAsyncTask = new SetLoginsAsyncTask(logins);
                        loginsAsyncTask.execute();
                    }

                    @Override
                    public void onCancel() {
                        // App code
                    }

                    @Override
                    public void onError(FacebookException exception) {
                        // App code
                    }
                });
    }

    public class SetLoginsAsyncTask extends AsyncTask<Void,Void,Void>
    {
        private Map<String,String> logins = new HashMap<>();
        public SetLoginsAsyncTask(Map<String,String> logins)
        {
            this.logins = logins;
        }
        @Override
        protected Void doInBackground(Void... params)
        {
            myCognito.getCredentialsProvider().setLogins(logins);
            myCognito.getCredentialsProvider().refresh();
            String testing = myCognito.getCredentialsProvider().getCredentials().getSessionToken();
            if(testing != null)
            {
                Log.d("MY_FACEBOOK","testing is " + testing);
            }
            else
            {
                Log.d("MY_FACEBOOK","testing is null");
            }
            return null;
        }
        @Override
        public void onPostExecute(Void var)
        {

        }
    }

So I'm a bit confused, what the next steps are after the facebook login button returns you the user and their firstName, LastName, email, etc. I want to add that user into Cognito and be confirmed. 因此,我有点困惑,在Facebook登录按钮返回您的用户及其名字,姓氏,电子邮件等之后,下一步是什么。我想将该用户添加到Cognito中并进行确认。

Hope someone can clarify with proper steps and code. 希望有人可以用适当的步骤和代码进行澄清。

Cheers 干杯

It depends on the AWS SDK for Android version you are using. 这取决于您使用的适用于Android版本的AWS开发工具包。 AWS Auth SDK for Android was introduced in 2.6.0. 适用于Android的AWS Auth SDK在2.6.0中引入。

  1. Add the following snippet to AndroidManifest.xml 将以下代码段添加到AndroidManifest.xml
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" 

    <!-- . . . -->

    <activity
        android:name="com.facebook.FacebookActivity"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="@string/fb_login_protocol_scheme" />
        </intent-filter>
    </activity>

    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id" />
  1. Import the following dependencies in gradle. 在gradle中导入以下依赖项。
        compile 'com.android.support:support-v4:24.+'
        compile ('com.amazonaws:aws-android-sdk-auth-facebook:2.6.+@aar') { transitive = true; }
        // Dependencies for the SDK Sign-in prompt UI library
        compile 'com.android.support:appcompat-v7:24.+'
        compile ('com.amazonaws:aws-android-sdk-auth-ui:2.6.+@aar') { transitive = true; }
  1. Do the following imports: 执行以下导入:
    import com.amazonaws.mobile.config.AWSConfiguration; <br/>
    import com.amazonaws.mobile.auth.core.IdentityManager; <br/>
    import com.amazonaws.mobile.auth.facebook.FacebookSignInProvider;                                                                             ; <br/>
    import com.amazonaws.mobile.auth.core.IdentityManager;<br/>
    import com.amazonaws.mobile.auth.ui.AuthUIConfiguration;<br/>
    import com.amazonaws.mobile.auth.ui.SignInActivity;<br/>
    import com.amazonaws.mobile.auth.facebook.FacebookButton;<br/>
    import com.amazonaws.mobile.auth.core.DefaultSignInResultHandler;<br/>                                                                            
  1. Add your FB App ID in strings.xml 在string.xml中添加您的FB应用ID
 <string name="facebook_app_id">1231231231232123123</string> <string name="fb_login_protocol_scheme">fb1231231231232123123</string> 
  1. Register Facebook SignInProvider in Application.java 在Application.java中注册Facebook SignInProvider
    private void initializeApplication() {

            AWSConfiguration awsConfiguration = new AWSConfiguration(getApplicationContext());

           // If IdentityManager is not created, create it
           if (IdentityManager.getDefaultIdentityManager() == null) {
                   IdentityManager identityManager =
                        new IdentityManager(getApplicationContext(), awsConfiguration);
                   IdentityManager.setDefaultIdentityManager(identityManager);
               }

               // Add Facebook as Identity Provider.
               IdentityManager.getDefaultIdentityManager().addSignInProvider(
                    FacebookSignInProvider.class);
               FacebookSignInProvider.setPermissions("public_profile");

             // . . .

            }
  1. Manage the SignInUI 管理SignUI
    import com.amazonaws.mobile.auth.core.DefaultSignInResultHandler;<br/>
    import com.amazonaws.mobile.auth.core.IdentityManager;<br/>
    import com.amazonaws.mobile.auth.core.IdentityProvider;<br/>
    import com.amazonaws.mobile.auth.core.StartupAuthErrorDetails;<br/>
    import com.amazonaws.mobile.auth.core.StartupAuthResult;<br/>
    import com.amazonaws.mobile.auth.core.StartupAuthResultHandler;<br/>
    import com.amazonaws.mobile.auth.core.signin.AuthException;<br/>
    import com.amazonaws.mobile.auth.ui.AuthUIConfiguration;<br/>
    import com.amazonaws.mobile.auth.ui.SignInActivity;<br/>

    @Override<br/>
    protected void onCreate(Bundle savedInstanceState) {<br/>
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        final IdentityManager identityManager = 
                IdentityManager.getDefaultIdentityManager();

        identityManager.doStartupAuth(this,
            new StartupAuthResultHandler() {
                @Override
                public void onComplete(final StartupAuthResult authResults) {
                    if (authResults.isUserSignedIn()) {
                        final IdentityProvider provider = 
                                identityManager.getCurrentIdentityProvider();

                        // If the user was  signed in previously with a provider,
                        // indicate that to them with a toast.
                        Toast.makeText(
                                SplashActivity.this, String.format("Signed in with %s",
                                provider.getDisplayName()), Toast.LENGTH_LONG).show();
                        callingActivity.startActivity(new Intent(SplashActivity.this, MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));<br/>
                        callingActivity.finish();
                        return;

                    } else {
                        // Either the user has never signed in with a provider before 
                        // or refresh failed with a previously signed in provider.

                        // Optionally, you may want to check if refresh 
                        // failed for the previously signed in provider.

                        final StartupAuthErrorDetails errors = 
                                authResults.getErrorDetails();

                         if (errors.didErrorOccurRefreshingProvider()) {
                            final AuthException providerAuthException = 
                                errors.getProviderRefreshException();

                            // Credentials for previously signed-in provider could not be refreshed
                            // The identity provider name is available here using: 
                            //     providerAuthException.getProvider().getDisplayName()

                        }


                        doSignIn(IdentityManager.getDefaultIdentityManager());
                        return;
                    }


                }
            }, 2000);
    }

    private void doSignIn(final IdentityManager identityManager) {

        identityManager.setUpToAuthenticate(
                SplashActivity.this, new DefaultSignInResultHandler() {

                    @Override
                    public void onSuccess(Activity activity, IdentityProvider identityProvider) {
                        if (identityProvider != null) {

                            // Sign-in succeeded
                            // The identity provider name is available here using: 
                            //     identityProvider.getDisplayName()

                        }

                        // On Success of SignIn go to your startup activity
                        activity.startActivity(new Intent(activity, MainActivity.class)
                                .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
                    }

                    @Override
                    public boolean onCancel(Activity activity) {

                        // Return false to prevent the user from dismissing 
                        // the sign in screen by pressing back button.
                        // Return true to allow this.

                        return false;
                    }
                });

        AuthUIConfiguration config =
                new AuthUIConfiguration.Builder()
                                       .signInButton(FacebookButton.class)
                                       // .signInButton(GoogleButton.class)
                                       // .userPools(true)
                                       .build();

        Context context = SplashActivity.this;
        SignInActivity.startSignInActivity(context, config);
        SplashActivity.this.finish();
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM