Skip to content

Commit ba16d75

Browse files
SUPERCILEXsamtstern
authored andcommitted
Completely overhaul IDP config (#1083)
1 parent e91b639 commit ba16d75

28 files changed

+836
-300
lines changed

app/src/main/java/com/firebase/uidemo/auth/AuthUiActivity.java

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@
4949
import butterknife.OnClick;
5050

5151
public class AuthUiActivity extends AppCompatActivity {
52-
private static final String UNCHANGED_CONFIG_VALUE = "CHANGE-ME";
5352
private static final String GOOGLE_TOS_URL = "https://www.google.com/policies/terms/";
5453
private static final String FIREBASE_TOS_URL = "https://firebase.google.com/terms/";
5554
private static final String GOOGLE_PRIVACY_POLICY_URL = "https://www.google.com/policies/privacy/";
@@ -204,7 +203,6 @@ public void signIn(View view) {
204203
.setPrivacyPolicyUrl(getSelectedPrivacyPolicyUrl())
205204
.setIsSmartLockEnabled(mEnableCredentialSelector.isChecked(),
206205
mEnableHintSelector.isChecked())
207-
.setAllowNewEmailAccounts(mAllowNewEmailAccounts.isChecked())
208206
.build(),
209207
RC_SIGN_IN);
210208
}
@@ -328,29 +326,27 @@ private List<IdpConfig> getSelectedProviders() {
328326

329327
if (mUseGoogleProvider.isChecked()) {
330328
selectedProviders.add(
331-
new IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER)
332-
.setPermissions(getGooglePermissions())
333-
.build());
329+
new IdpConfig.GoogleBuilder().setScopes(getGoogleScopes()).build());
334330
}
335331

336332
if (mUseFacebookProvider.isChecked()) {
337-
selectedProviders.add(
338-
new IdpConfig.Builder(AuthUI.FACEBOOK_PROVIDER)
339-
.setPermissions(getFacebookPermissions())
340-
.build());
333+
selectedProviders.add(new IdpConfig.FacebookBuilder()
334+
.setPermissions(getFacebookPermissions())
335+
.build());
341336
}
342337

343338
if (mUseTwitterProvider.isChecked()) {
344-
selectedProviders.add(new IdpConfig.Builder(AuthUI.TWITTER_PROVIDER).build());
339+
selectedProviders.add(new IdpConfig.TwitterBuilder().build());
345340
}
346341

347342
if (mUseEmailProvider.isChecked()) {
348-
selectedProviders.add(new IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build());
343+
selectedProviders.add(new IdpConfig.EmailBuilder()
344+
.setAllowNewAccounts(mAllowNewEmailAccounts.isChecked())
345+
.build());
349346
}
350347

351348
if (mUsePhoneProvider.isChecked()) {
352-
selectedProviders.add(
353-
new IdpConfig.Builder(AuthUI.PHONE_VERIFICATION_PROVIDER).build());
349+
selectedProviders.add(new IdpConfig.PhoneBuilder().build());
354350
}
355351

356352
return selectedProviders;
@@ -376,12 +372,12 @@ private String getSelectedPrivacyPolicyUrl() {
376372

377373
@MainThread
378374
private boolean isGoogleMisconfigured() {
379-
return UNCHANGED_CONFIG_VALUE.equals(getString(R.string.default_web_client_id));
375+
return AuthUI.UNCONFIGURED_CONFIG_VALUE.equals(getString(R.string.default_web_client_id));
380376
}
381377

382378
@MainThread
383379
private boolean isFacebookMisconfigured() {
384-
return UNCHANGED_CONFIG_VALUE.equals(getString(R.string.facebook_application_id));
380+
return AuthUI.UNCONFIGURED_CONFIG_VALUE.equals(getString(R.string.facebook_application_id));
385381
}
386382

387383
@MainThread
@@ -391,7 +387,7 @@ private boolean isTwitterMisconfigured() {
391387
getString(R.string.twitter_consumer_secret)
392388
);
393389

394-
return twitterConfigs.contains(UNCHANGED_CONFIG_VALUE);
390+
return twitterConfigs.contains(AuthUI.UNCONFIGURED_CONFIG_VALUE);
395391
}
396392

397393
@MainThread
@@ -412,7 +408,7 @@ private List<String> getFacebookPermissions() {
412408
}
413409

414410
@MainThread
415-
private List<String> getGooglePermissions() {
411+
private List<String> getGoogleScopes() {
416412
List<String> result = new ArrayList<>();
417413
if (mGoogleScopeYoutubeData.isChecked()) {
418414
result.add("https://www.googleapis.com/auth/youtube.readonly");

auth/README.md

Lines changed: 52 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -216,16 +216,16 @@ You can enable sign-in providers like Google Sign-In or Facebook Log In by calli
216216

217217
```java
218218
startActivityForResult(
219-
AuthUI.getInstance()
220-
.createSignInIntentBuilder()
221-
.setAvailableProviders(
222-
Arrays.asList(new AuthUI.IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build(),
223-
                             new AuthUI.IdpConfig.Builder(AuthUI.PHONE_VERIFICATION_PROVIDER).build(),
224-
new AuthUI.IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER).build(),
225-
new AuthUI.IdpConfig.Builder(AuthUI.FACEBOOK_PROVIDER).build(),
226-
new AuthUI.IdpConfig.Builder(AuthUI.TWITTER_PROVIDER).build()))
227-
.build(),
228-
RC_SIGN_IN);
219+
AuthUI.getInstance()
220+
.createSignInIntentBuilder()
221+
.setAvailableProviders(Arrays.asList(
222+
new AuthUI.IdpConfig.EmailBuilder().build(),
223+
new AuthUI.IdpConfig.PhoneBuilder().build(),
224+
new AuthUI.IdpConfig.GoogleBuilder().build(),
225+
new AuthUI.IdpConfig.FacebookBuilder().build(),
226+
new AuthUI.IdpConfig.TwitterBuilder().build()))
227+
.build(),
228+
RC_SIGN_IN);
229229
```
230230

231231
##### Adding a ToS and privacy policy
@@ -260,28 +260,30 @@ startActivityForResult(
260260
RC_SIGN_IN);
261261
```
262262

263-
It is often desirable to disable Smart Lock in development but enable it in production. To achieve
264-
this, you can use the `BuildConfig.DEBUG` flag to control Smart Lock:
263+
###### Smart Lock hints
264+
265+
If you'd like to keep Smart Lock's "hints" but disable the saving/retrieving of credentials, then
266+
you can use the two-argument version of `setIsSmartLockEnabled`:
265267

266268
```java
267269
startActivityForResult(
268270
AuthUI.getInstance()
269271
.createSignInIntentBuilder()
270-
.setIsSmartLockEnabled(!BuildConfig.DEBUG)
272+
.setIsSmartLockEnabled(false, true)
271273
.build(),
272274
RC_SIGN_IN);
273275
```
274276

275-
###### Smart Lock hints
277+
###### Smart Lock in dev builds
276278

277-
If you'd like to keep Smart Lock's "hints" but disable the saving/retrieving of credentials, then
278-
you can use the two-argument version of `setIsSmartLockEnabled`:
279+
It is often desirable to disable Smart Lock in development but enable it in production. To achieve
280+
this, you can use the `BuildConfig.DEBUG` flag to control Smart Lock:
279281

280282
```java
281283
startActivityForResult(
282284
AuthUI.getInstance()
283285
.createSignInIntentBuilder()
284-
.setIsSmartLockEnabled(false, true)
286+
.setIsSmartLockEnabled(!BuildConfig.DEBUG /* credentials */, true /* hints */)
285287
.build(),
286288
RC_SIGN_IN);
287289
```
@@ -293,27 +295,27 @@ provide a default phone number (in international format) that will be used to pr
293295
country code and phone number input fields. The user is still able to edit the number if desired.
294296

295297
```java
296-
// Use a Bundle to hold the default number, and pass it to the Builder via setParams:
297-
Bundle params = new Bundle();
298-
params.putString(AuthUI.EXTRA_DEFAULT_PHONE_NUMBER, "+123456789");
299-
IdpConfig phoneConfigWithDefaultNumber =
300-
new IdpConfig.Builder(AuthUI.PHONE_VERIFICATION_PROVIDER)
301-
.setParams(params)
302-
.build();
298+
IdpConfig phoneConfigWithDefaultNumber = new IdpConfig.PhoneBuilder()
299+
.setDefaultNumber("+123456789")
300+
.build();
301+
```
302+
303+
Alternatively, you can set only the default phone number country.
304+
305+
```java
306+
IdpConfig phoneConfigWithDefaultNumber = new IdpConfig.PhoneBuilder()
307+
.setDefaultCountryIso("ca")
308+
.build();
303309
```
304310

305311
It is also possible to set a default country code along with a national number if a specific country
306312
is your app's target audience. This will take precedence over the full default phone number if both
307313
are provided.
308314

309315
```java
310-
Bundle params = new Bundle();
311-
params.putString(AuthUI.EXTRA_DEFAULT_COUNTRY_CODE, "ca");
312-
params.putString(AuthUI.EXTRA_DEFAULT_NATIONAL_NUMBER, "23456789");
313-
IdpConfig phoneConfigWithDefaultCountryAndNationalNumber =
314-
new IdpConfig.Builder(AuthUI.PHONE_VERIFICATION_PROVIDER)
315-
.setParams(params)
316-
.build();
316+
IdpConfig phoneConfigWithDefaultNumber = new IdpConfig.PhoneBuilder()
317+
.setDefaultNumber("ca", "23456789")
318+
.build();
317319
```
318320

319321
### Handling the sign-in response
@@ -560,50 +562,46 @@ at a diff of the `strings.xml` file before updating FirebaseUI.
560562

561563
### Google
562564
By default, FirebaseUI requests the `email` and `profile` scopes when using Google Sign-In. If you
563-
would like to request additional scopes from the user, call `setPermissions` on the
564-
`AuthUI.IdpConfig.Builder` when initializing FirebaseUI.
565+
would like to request additional scopes from the user, call `setScopes` on the
566+
`AuthUI.IdpConfig.GoogleBuilder` when initializing FirebaseUI.
565567

566568

567569
```java
568570
// For a list of all scopes, see:
569571
// https://developers.google.com/identity/protocols/googlescopes
570-
AuthUI.IdpConfig googleIdp = new AuthUI.IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER)
571-
.setPermissions(Arrays.asList(Scopes.GAMES))
572-
.build();
572+
AuthUI.IdpConfig googleIdp = new AuthUI.IdpConfig.GoogleBuilder()
573+
.setScopes(Arrays.asList(Scopes.GAMES))
574+
.build();
573575

574576
startActivityForResult(
575-
AuthUI.getInstance()
576-
.createSignInIntentBuilder()
577-
.setAvailableProviders(Arrays.asList(new IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build(),
578-
googleIdp,
579-
new IdpConfig.Builder(AuthUI.FACEBOOK_PROVIDER).build()))
580-
.build(),
581-
RC_SIGN_IN);
577+
AuthUI.getInstance()
578+
.createSignInIntentBuilder()
579+
.setAvailableProviders(Arrays.asList(googleIdp, ...))
580+
.build(),
581+
RC_SIGN_IN);
582582
```
583583

584584

585585
### Facebook
586586

587587
By default, FirebaseUI requests the `email` and `public_profile` permissions when initiating
588588
Facebook Login. If you would like to request additional permissions from the user, call
589-
`setPermissions` on the `AuthUI.IdpConfig.Builder` when initializing FirebaseUI.
589+
`setPermissions` on the `AuthUI.IdpConfig.FacebookBuilder` when initializing FirebaseUI.
590590

591591
```java
592592
// For a list of permissions see:
593-
// https://developers.facebook.com/docs/facebook-login/android
594593
// https://developers.facebook.com/docs/facebook-login/permissions
595594

596-
AuthUI.IdpConfig facebookIdp = new AuthUI.IdpConfig.Builder(AuthUI.FACEBOOK_PROVIDER)
597-
.setPermissions(Arrays.asList("user_friends"))
598-
.build();
595+
AuthUI.IdpConfig facebookIdp = new AuthUI.IdpConfig.FacebookBuilder()
596+
.setPermissions(Arrays.asList("user_friends"))
597+
.build();
599598

600599
startActivityForResult(
601-
AuthUI.getInstance()
602-
.createSignInIntentBuilder()
603-
.setAvailableProviders(Arrays.asList(new AuthUI.IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build(),
604-
facebookIdp))
605-
.build(),
606-
RC_SIGN_IN);
600+
AuthUI.getInstance()
601+
.createSignInIntentBuilder()
602+
.setAvailableProviders(Arrays.asList(facebookIdp, ...))
603+
.build(),
604+
RC_SIGN_IN);
607605
```
608606

609607
### Twitter

auth/src/main/AndroidManifest.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,12 @@
7474
</intent-filter>
7575
</activity>
7676

77+
<provider
78+
android:name=".data.client.AuthUiInitProvider"
79+
android:authorities="${applicationId}.authuiinitprovider"
80+
android:exported="false"
81+
android:initOrder="90" />
82+
7783
</application>
7884

7985
</manifest>

0 commit comments

Comments
 (0)