如何将 facebook 用户添加到 aws cognito? - android
How to add facebook user to aws cognito? - android
我有点困惑。我能够使用 facebook sdk 设置 Facebook 登录按钮。接下来,我想将用户添加到 cognito 中,但指南告诉我这样做:
Map<String, String> logins = new HashMap<String, String>();
logins.put("graph.facebook.com", AccessToken.getCurrentAccessToken().getToken());
credentialsProvider.setLogins(logins);
我做到了,我没有看到用户隐身。我很困惑,"federated authentication" 是什么意思?我想要完成的是:
1.User 通过 Facebook 注册
2.Oncefacebook登录成功,我想将该用户加入认知
这是我当前的代码:
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)
{
}
}
所以我有点困惑,Facebook 登录按钮后的下一步是什么 returns 你是用户和他们的名字、姓氏、电子邮件等。我想将该用户添加到 Cognito 中,然后得到确认。
希望有人能用正确的步骤和代码来澄清。
干杯
这取决于您使用的 Android 版本的 AWS SDK。 2.6.0 中引入了适用于 Android 的 AWS Auth SDK。
- 将以下代码段添加到 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" />
- 在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; }
- 执行以下导入:
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/>
- 在 strings.xml
中添加您的 FB App ID
<string name="facebook_app_id">1231231231232123123</string>
<string name="fb_login_protocol_scheme">fb1231231231232123123</string>
- 在 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");
// . . .
}
- 管理 SignInUI
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();
}
我有点困惑。我能够使用 facebook sdk 设置 Facebook 登录按钮。接下来,我想将用户添加到 cognito 中,但指南告诉我这样做:
Map<String, String> logins = new HashMap<String, String>();
logins.put("graph.facebook.com", AccessToken.getCurrentAccessToken().getToken());
credentialsProvider.setLogins(logins);
我做到了,我没有看到用户隐身。我很困惑,"federated authentication" 是什么意思?我想要完成的是:
1.User 通过 Facebook 注册 2.Oncefacebook登录成功,我想将该用户加入认知
这是我当前的代码:
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)
{
}
}
所以我有点困惑,Facebook 登录按钮后的下一步是什么 returns 你是用户和他们的名字、姓氏、电子邮件等。我想将该用户添加到 Cognito 中,然后得到确认。
希望有人能用正确的步骤和代码来澄清。
干杯
这取决于您使用的 Android 版本的 AWS SDK。 2.6.0 中引入了适用于 Android 的 AWS Auth SDK。
- 将以下代码段添加到 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" />
- 在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; }
- 执行以下导入:
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/>
- 在 strings.xml 中添加您的 FB App ID
<string name="facebook_app_id">1231231231232123123</string> <string name="fb_login_protocol_scheme">fb1231231231232123123</string>
- 在 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");
// . . .
}
- 管理 SignInUI
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();
}