|
30 | 30 | import com.facebook.react.bridge.WritableArray;
|
31 | 31 | import com.facebook.react.bridge.WritableMap;
|
32 | 32 | import com.google.android.gms.tasks.OnCompleteListener;
|
| 33 | +import com.google.android.gms.tasks.OnFailureListener; |
| 34 | +import com.google.android.gms.tasks.OnSuccessListener; |
| 35 | +import com.google.android.gms.tasks.Task; |
33 | 36 | import com.google.firebase.FirebaseApp;
|
34 | 37 | import com.google.firebase.FirebaseException;
|
35 | 38 | import com.google.firebase.FirebaseNetworkException;
|
|
56 | 59 | import com.google.firebase.auth.MultiFactorResolver;
|
57 | 60 | import com.google.firebase.auth.MultiFactorSession;
|
58 | 61 | import com.google.firebase.auth.OAuthProvider;
|
| 62 | +import com.google.firebase.auth.OAuthCredential; |
59 | 63 | import com.google.firebase.auth.PhoneAuthCredential;
|
60 | 64 | import com.google.firebase.auth.PhoneAuthOptions;
|
61 | 65 | import com.google.firebase.auth.PhoneAuthProvider;
|
@@ -203,7 +207,6 @@ public void addIdTokenListener(final String appName) {
|
203 | 207 |
|
204 | 208 | FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
|
205 | 209 | FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
|
206 |
| - |
207 | 210 | if (!mIdTokenListeners.containsKey(appName)) {
|
208 | 211 | FirebaseAuth.IdTokenListener newIdTokenListener =
|
209 | 212 | firebaseAuth1 -> {
|
@@ -838,6 +841,45 @@ private void signInWithCredential(
|
838 | 841 | });
|
839 | 842 | }
|
840 | 843 | }
|
| 844 | + @ReactMethod |
| 845 | + public void signInWithProvider(String appName, String providerId, @Nullable String email, Promise promise){ |
| 846 | + OAuthProvider.Builder provider = OAuthProvider.newBuilder(providerId); |
| 847 | + if(email != null){ |
| 848 | + provider.addCustomParameter("login_hint", email); |
| 849 | + } |
| 850 | + Activity activity = getCurrentActivity(); |
| 851 | + FirebaseApp firebaseApp = FirebaseApp.getInstance(appName); |
| 852 | + FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp); |
| 853 | + |
| 854 | + OnSuccessListener onSuccess = new OnSuccessListener<AuthResult>(){ |
| 855 | + @Override |
| 856 | + public void onSuccess(AuthResult authResult) { |
| 857 | + Log.d(TAG, "signInWithProvider:onComplete:success"); |
| 858 | + promiseWithAuthResult(authResult, promise); |
| 859 | + } |
| 860 | + }; |
| 861 | + |
| 862 | + OnFailureListener onFailure = new OnFailureListener(){ |
| 863 | + @Override |
| 864 | + public void onFailure(@NonNull Exception e) { |
| 865 | + Log.w(TAG, "signInWithProvider:onComplete:failure", e); |
| 866 | + promiseRejectAuthException(promise, e); |
| 867 | + } |
| 868 | + }; |
| 869 | + |
| 870 | + |
| 871 | + Task<AuthResult> pendingResultTask = firebaseAuth.getPendingAuthResult(); |
| 872 | + if(pendingResultTask != null){ |
| 873 | + pendingResultTask |
| 874 | + .addOnSuccessListener(onSuccess) |
| 875 | + .addOnFailureListener(onFailure); |
| 876 | + } else { |
| 877 | + firebaseAuth |
| 878 | + .startActivityForSignInWithProvider(activity, provider.build()) |
| 879 | + .addOnSuccessListener(onSuccess) |
| 880 | + .addOnFailureListener(onFailure); |
| 881 | + } |
| 882 | + } |
841 | 883 |
|
842 | 884 | /**
|
843 | 885 | * signInWithPhoneNumber
|
@@ -1866,6 +1908,30 @@ private void promiseWithAuthResult(AuthResult authResult, Promise promise) {
|
1866 | 1908 | WritableMap authResultMap = Arguments.createMap();
|
1867 | 1909 | WritableMap userMap = firebaseUserToMap(authResult.getUser());
|
1868 | 1910 |
|
| 1911 | + if(authResult.getCredential() != null){ |
| 1912 | + if(authResult.getCredential() instanceof OAuthCredential){ |
| 1913 | + OAuthCredential creds = (OAuthCredential) authResult.getCredential(); |
| 1914 | + WritableMap credentialMap = Arguments.createMap(); |
| 1915 | + |
| 1916 | + credentialMap.putString("providerId", creds.getProvider()); |
| 1917 | + credentialMap.putString("signInMethod", creds.getSignInMethod()); |
| 1918 | + |
| 1919 | + if(creds.getIdToken() != null){ |
| 1920 | + credentialMap.putString("idToken", creds.getIdToken()); |
| 1921 | + } |
| 1922 | + |
| 1923 | + if(creds.getAccessToken() != null){ |
| 1924 | + credentialMap.putString("accessToken", creds.getAccessToken()); |
| 1925 | + } |
| 1926 | + |
| 1927 | + if(creds.getSecret() != null){ |
| 1928 | + credentialMap.putString("secret", creds.getSecret()); |
| 1929 | + } |
| 1930 | + |
| 1931 | + authResultMap.putMap("credential", credentialMap); |
| 1932 | + } |
| 1933 | + } |
| 1934 | + |
1869 | 1935 | if (authResult.getAdditionalUserInfo() != null) {
|
1870 | 1936 | WritableMap additionalUserInfoMap = Arguments.createMap();
|
1871 | 1937 |
|
|
0 commit comments