Auth0 is an authentication broker that supports social identity providers as well as enterprise identity providers such as Active Directory, LDAP, Google Apps and Salesforce.
Lock-Facebook helps you integrate native Login with Facebook Android SDK and Lock
Android 4.0 or later & Facebook Android SDK 4.+
The Lock-Facebook is available through Maven Central and JCenter. To install it, simply add the following line to your build.gradle
:
compile 'com.auth0.android:lock-facebook:3.1.0'
- Go to the Facebook Developers Console and add a new App: Choose "Android" and give it a valid name. Click "Create new Facebook App ID".
- Follow the Android Quickstart provided by Facebook. When you're done, you'll end up in your Application's screen. Take note of the
APP ID
andAPP SECRET
values. - On the left side you have the navigation drawer. Click Settings and then Basic. Turn ON the Single Sign On switch and click the Save button.
- Now click Settings and then Advanced. Turn ON the Native or desktop app? switch.
- Go to the Auth0 Dashboard and click Social Connections. Click Facebook and a dialog will prompt.
- Complete the "App ID" field with the
APP ID
value obtained in the step 2 of the Facebook Developers Console section above. - Complete the "App Secret" field with the
APP SECRET
value obtained in the step 2 of the Facebook Developers Console section above. Click the Save button. - Go to the Auth0 Dashboard and click Clients. If you haven't created yet one, do that first and get into your client configuration page. At the bottom of the page, click the "Show Advanced Settings" link and go to the "Mobile Settings" tab.
- In the Android section, complete the Package Name with your application's package name. Finally, complete the Key Hashes field with the SHA-256 of the certificate you're using to sign your application.
- In your android application, create a new String resource in the
res/strings.xml
file. Name itfacebook_app_id
and set as value theAPP ID
obtained in the step 2 of the Facebook Developers Console setup section above. - Add the
FacebookActivity
andfacebook_app_id
MetaData to theAndroidManifest.xml
file, inside the Application tag.
<activity
android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name"/>
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />
- Add the Internet Android permission to your
AndroidManifest.xml
file.
<uses-permission android:name="android.permission.INTERNET" />
- Create a new instance of the
FacebookAuthProvider
.
public class MainActivity extends AppCompatActivity {
private FacebookAuthProvider provider;
// ...
@Override
protected void onCreate(Bundle savedInstanceState) {
Auth0 auth0 = new Auth0(getString(R.string.com_auth0_client_id), getString(R.string.com_auth0_domain));
final AuthenticationAPIClient client = new AuthenticationAPIClient(auth0);
provider = new FacebookAuthProvider(client);
}
// ...
}
Depending on your use case, you'll need to add a few more lines of code to capture the authorization result. Follow the guides below:
If you need further help with the setup, please check Facebook's Getting Started Guide.
This library includes an implementation of the AuthHandler
interface for you to use it directly with Lock. Create a new instance of the FacebookAuthHandler
class passing a valid FacebookAuthProvider
. Don't forget to customize the permissions if you need to.
Auth0 auth0 = new Auth0("auth0-client-id", "auth0-domain");
FacebookAuthProvider provider = new FacebookAuthProvider(new AuthenticationAPIClient(auth0));
provider.setPermissions(Arrays.asList("public_profile", "user_photos"));
FacebookAuthHandler handler = new FacebookAuthHandler(provider);
Finally in the Lock Builder, call withAuthHandlers
passing the recently created instance.
lock = Lock.newBuilder(auth0, authCallback)
.withAuthHandlers(handler)
//...
.build(this);
That's it! When Lock needs to authenticate using that connection name, it will ask the FacebookAuthHandler
for a valid AuthProvider
.
We provide this demo in the
PhotosActivity
class. We also use the Facebook SDK to get the User Albums and show them on a list.
Just create a new instance of FacebookAuthProvider
with an AuthenticationAPIClient
.
Auth0 auth0 = new Auth0("auth0-client-id", "auth0-domain");
final AuthenticationAPIClient client = new AuthenticationAPIClient(auth0);
FacebookAuthProvider provider = new FacebookAuthProvider(client);
Override your activity's onActivityResult
method and redirect the received parameters to the provider instance's authorize
method.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (provider.authorize(requestCode, resultCode, data)) {
return;
}
super.onActivityResult(requestCode, resultCode, data);
}
Call start
to begin the authentication flow.
provider.start(this, callback, RC_PERMISSIONS, RC_AUTHENTICATION);
That's it! You'll receive the result in the AuthCallback
you passed.
We provide this demo in the
SimpleActivity
class.
To use a custom social connection name to authorize against Auth0, call setConnection
with your new connection name.
FacebookAuthProvider provider = new FacebookAuthProvider("my_connection_name", client);
By default, the permission public_profile
is requested. You can customize them by calling setPermissions
with the list of Permissions.
provider.setPermissions(Arrays.asList("public_profile", "user_photos"));
This provider doesn't require any special Android Manifest Permission to authenticate the user. But if your use case requires them, you can let the AuthProvider handle them for you. Use the setRequiredPermissions
method.
provider.setRequiredPermissions(new String[]{"android.permission.GET_ACCOUNTS"});
To log out the user so that the next time he's prompted to input his credentials call clearSession
. After you do this the provider state will be invalid and you will need to call start
again before trying to authorize
a result. Calling stop
has the same effect.
provider.clearSession();
By default, this provider will remember the last account used to log in. If you want to change this behavior, use the following method.
provider.rememberLastLogin(false);
If you have found a bug or if you have a feature request, please report them at this repository issues section. Please do not report security vulnerabilities on the public GitHub issue tracker. The Responsible Disclosure Program details the procedure for disclosing security issues.
Auth0 helps you to:
- Add authentication with multiple authentication sources, either social like Google, Facebook, Microsoft Account, LinkedIn, GitHub, Twitter, Box, Salesforce, among others, or enterprise identity systems like Windows Azure AD, Google Apps, Active Directory, ADFS or any SAML Identity Provider.
- Add authentication through more traditional username/password databases.
- Add support for linking different user accounts with the same user.
- Support for generating signed Json Web Tokens to call your APIs and flow the user identity securely.
- Analytics of how, when and where users are logging in.
- Pull data from other sources and add it to the user profile, through JavaScript rules.
- Go to Auth0 and click Sign Up.
- Use Google, GitHub or Microsoft Account to login.
Lock-Facebook is available under the MIT license. See the LICENSE file for more info.