Skip to content

Commit

Permalink
Merge branch 'develop' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
tal-mi committed Nov 27, 2023
2 parents f085b3a + 76c8c77 commit d1b81d6
Show file tree
Hide file tree
Showing 19 changed files with 486 additions and 88 deletions.
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ Add the plugin in your **package.json** file.

### Android setup

## Android v7 upgrade
Plugin version 0.2.4+ will depend on Android SDK core v7.
Required changes to your plugin based on Android SDK core v7 are documented in the [Android core documentation](https://sap.github.io/gigya-android-sdk/sdk-core/#upgrading-to-v7)

Add the following to your *MainApplication.java* file:

```java
Expand Down Expand Up @@ -118,6 +122,10 @@ const send = await Gigya.socialLogin("facebook");

## Embedded social providers

# Android v7 upgrade
Plugin version 0.2.4+ will depend on Android SDK core v7.
Please view the changes required to be made to yours applicationin the [Android code documentation](https://sap.github.io/gigya-android-sdk/sdk-core/#configuring-native-login) for updateing to external providers usage.

Specific social providers (Facebook, Google) require additional setup. This is due to their requirement for specific (embedded native) SDKs.

To register social providers you will need to create a 'swift bridge' file (same as with using a custom schema).
Expand Down
3 changes: 1 addition & 2 deletions android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -63,13 +63,12 @@ repositories {
google()
}


dependencies {
//noinspection GradleDynamicVersion
implementation "com.facebook.react:react-native:+" // From node_modules

// Gigya implementations.
api 'com.github.SAP.gigya-android-sdk:sdk-core:core-v6.2.1'
api 'com.sap.oss.gigya-android-sdk:sdk-core:7.0.7'
api 'com.github.SAP.gigya-android-sdk:sdk-biometric:bio-v2.1.1'
api 'com.google.android.gms:play-services-fido:18.1.0'
api 'com.google.code.gson:gson:2.8.9'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,13 @@ public boolean isLoggedIn() {
return isLoggedIn;
}

@ReactMethod
public static void setExternalProvidersPath(String path) {
if (gigyaSdk != null) {
gigyaSdk.setExternalProvidersPath(path);
}
}

@ReactMethod
public void invalidateSession(Promise promise) {
gigyaSdk.invalidateSession(promise);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,16 @@ public GigyaSdkWrapper(Application application, Class<T> accountSchema) {

try {
IApiRequestFactory ref = Gigya.getContainer().get(IApiRequestFactory.class);
ref.setSDK("react_native_" + "0.2.3" + "_android_" + Gigya.VERSION);
ref.setSDK("react_native_" + "0.3.0" + "_android_" + Gigya.VERSION);
} catch (Exception ex) {
ex.printStackTrace();
}
}

void setExternalProvidersPath(String path) {
gigyaInstance.setExternalProvidersPath(path);
}

void initFor(@Nonnull String apikey, @Nullable String apiDomain) {
if (apiDomain == null) {
gigyaInstance.init(apikey);
Expand Down Expand Up @@ -249,6 +253,13 @@ public void onError(GigyaError gigyaError) {
GigyaSdkRNLogger.log("social login : error with message: " + gigyaError.getLocalizedMessage());
promiseWrapper.reject(gigyaError);
}

@Override
public void onOperationCanceled() {
GigyaSdkRNLogger.log("sso login : canceled");
resolverHelper.clear();
promiseWrapper.reject(GigyaError.cancelledOperation());
}

@Override
public void onConflictingAccounts(@NonNull GigyaApiResponse response, @NonNull ILinkAccountsResolver resolver) {
Expand All @@ -268,6 +279,7 @@ public void onPendingRegistration(@NonNull GigyaApiResponse response, @NonNull I
public void onPendingVerification(@NonNull GigyaApiResponse response, @Nullable String regToken) {
promiseWrapper.reject(response);
}

});
}

Expand All @@ -288,6 +300,20 @@ public void onError(GigyaError gigyaError) {
promiseWrapper.reject(gigyaError);
}

@Override
public void onOperationCanceled() {
GigyaSdkRNLogger.log("sso login : canceled");
resolverHelper.clear();
promiseWrapper.reject(
new GigyaError(
"",
200001,
"Operation canceled",
null
)
);
}

@Override
public void onConflictingAccounts(@NonNull GigyaApiResponse response, @NonNull ILinkAccountsResolver resolver) {
resolverHelper.interrupt = "conflictingAccount";
Expand Down
2 changes: 1 addition & 1 deletion example/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ const App = (): React.ReactElement => {

const socialLogin = async () => {
try {
const senddd = await Gigya.socialLogin("linkedin");
const senddd = await Gigya.socialLogin("facebook");

console.log("socialLogin: " + JSON.stringify(senddd));

Expand Down
12 changes: 6 additions & 6 deletions example/Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ GEM
specs:
CFPropertyList (3.0.5)
rexml
activesupport (6.1.7)
activesupport (6.1.7.6)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
Expand Down Expand Up @@ -54,7 +54,7 @@ GEM
netrc (~> 0.11)
cocoapods-try (1.2.0)
colored2 (3.1.2)
concurrent-ruby (1.1.10)
concurrent-ruby (1.2.2)
escape (0.0.4)
ethon (0.16.0)
ffi (>= 1.15.0)
Expand All @@ -63,10 +63,10 @@ GEM
fuzzy_match (2.0.4)
gh_inspector (1.1.3)
httpclient (2.8.3)
i18n (1.12.0)
i18n (1.14.1)
concurrent-ruby (~> 1.0)
json (2.6.2)
minitest (5.16.3)
minitest (5.19.0)
molinillo (0.8.0)
nanaimo (0.3.0)
nap (1.1.0)
Expand All @@ -76,7 +76,7 @@ GEM
ruby-macho (2.5.1)
typhoeus (1.4.0)
ethon (>= 0.9.0)
tzinfo (2.0.5)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
xcodeproj (1.22.0)
CFPropertyList (>= 2.3.3, < 4.0)
Expand All @@ -85,7 +85,7 @@ GEM
colored2 (~> 3.1)
nanaimo (~> 0.3.0)
rexml (~> 3.2.4)
zeitwerk (2.6.6)
zeitwerk (2.6.11)

PLATFORMS
ruby
Expand Down
1 change: 1 addition & 0 deletions example/android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,7 @@ android {

dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation 'com.facebook.android:facebook-android-sdk:14.1.1'

//noinspection GradleDynamicVersion
implementation "com.facebook.react:react-native:+" // From node_modules
Expand Down
16 changes: 9 additions & 7 deletions example/android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gigyarnexample">
package="com.gigyarnexample"
xmlns:tools="http://schemas.android.com/tools">

<uses-permission android:name="android.permission.INTERNET" />

Expand Down Expand Up @@ -37,12 +38,13 @@
android:theme="@style/Theme.AppCompat.Translucent" />

<!-- START: Facebook integration -->
<!-- <activity-->
<!-- android:name="com.facebook.FacebookActivity"-->
<!-- android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"-->
<!-- android:label="@string/app_name"-->
<!-- android:theme="@android:style/Theme.Translucent.NoTitleBar"-->
<!-- />-->
<activity
tools:replace="android:theme"
android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar">
</activity>

<activity
android:name="com.gigya.android.sdk.providers.sso.GigyaSSOLoginActivity"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public void onCreate() {
GigyaSdkBiometricModule.setBiometricPromptInfo(new GigyaPromptInfo(
"Biometric Auth", "Place finger on sensor to authenticate", ""
));

GigyaSdkModule.setExternalProvidersPath("com.gigyarnexample.gigya.providers");
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
package com.gigyarnexample.gigya.providers;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.login.LoginBehavior;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import com.gigyarnexample.R;
import com.gigya.android.sdk.providers.external.IProviderWrapper;
import com.gigya.android.sdk.providers.external.IProviderWrapperCallback;
import com.gigya.android.sdk.providers.external.ProviderWrapper;
import com.gigya.android.sdk.ui.HostActivity;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
* Facebook sign in wrapper class.
* Add the following class to your application ../gigya.providers package.
*/
public class FacebookProviderWrapper extends ProviderWrapper implements IProviderWrapper {

private static final String[] DEFAULT_READ_PERMISSIONS = {"email"};
private final
CallbackManager callbackManager = CallbackManager.Factory.create();
public FacebookProviderWrapper(Context context) {
super(context, R.string.facebook_app_id);
}

@Override
public void login(Context context,
final Map<String, Object> params,
final IProviderWrapperCallback wrapperCallback) {

final List<String> readPermissions = Arrays.asList(DEFAULT_READ_PERMISSIONS);

// Check login state.
final AccessToken accessToken = AccessToken.getCurrentAccessToken();
boolean isLoggedIn = accessToken != null && !accessToken.isExpired() && permissionsGranted(readPermissions);
if (isLoggedIn) {
// Notify login success.
final Map<String, Object> map = new HashMap<>();
map.put("token", accessToken.getToken());
map.put("expiration", accessToken.getExpires().getTime() / 1000);
wrapperCallback.onLogin(map);
return;
}

// Start new login flow.
HostActivity.present(context, new HostActivity.HostActivityLifecycleCallbacks() {
@Override
public void onCreate(final AppCompatActivity activity, @Nullable Bundle savedInstanceState) {
final LoginManager loginManager = LoginManager.getInstance();
// Set login behaviour. Override if provided in login parameters.
LoginBehavior loginBehaviour = LoginBehavior.NATIVE_WITH_FALLBACK;
if (params != null && params.containsKey("facebookLoginBehavior")) {
Object behaviour = params.get("facebookLoginBehavior");
if (behaviour instanceof LoginBehavior) {
loginBehaviour = (LoginBehavior) behaviour;
}
}
loginManager.setLoginBehavior(loginBehaviour);
loginManager.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
loginManager.unregisterCallback(callbackManager);
AccessToken accessToken = AccessToken.getCurrentAccessToken();

final Map<String, Object> map = new HashMap<>();
map.put("token", accessToken.getToken());
map.put("expiration", accessToken.getExpires().getTime() / 1000);
// Notify login success. Provider a map of required values.
wrapperCallback.onLogin(map);
activity.finish();
}

@Override
public void onCancel() {
loginManager.unregisterCallback(callbackManager);
// Notify login canceled.
wrapperCallback.onCanceled();
activity.finish();
}

@Override
public void onError(FacebookException error) {
loginManager.unregisterCallback(callbackManager);
// Notify login failed.
wrapperCallback.onFailed(error.getLocalizedMessage());
activity.finish();
}
});
// Request login.
loginManager.logInWithReadPermissions(activity, readPermissions);
}

@Override
public void onActivityResult(AppCompatActivity activity, int requestCode, int resultCode, @Nullable Intent data) {
callbackManager.onActivityResult(requestCode, resultCode, data);
}
});
}

@Override
public void logout() {
if (AccessToken.getCurrentAccessToken() != null) {
LoginManager.getInstance().logOut();
}
}

private boolean permissionsGranted(List<String> permissions) {
AccessToken token = AccessToken.getCurrentAccessToken();
Set<String> grantedPermissions = token.getPermissions();
for (String permission : permissions) {
if (!grantedPermissions.contains(permission))
return false;
}
return true;
}

}
5 changes: 3 additions & 2 deletions example/android/app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<resources>
<string name="app_name">GigyaRnExample</string>
<string name="facebook_app_id">113512789545198</string>
<string name="facebook_client_token">26444838e49deb23e6d5fbc9a27672f2</string>
<string name="facebook_app_id">APP_ID_HERE </string>
<string name="fb_login_protocol_scheme">fbAPP_ID_HERE</string>
<string name="facebook_client_token">CLIENT_TOKEN_HERE</string>
</resources>
Loading

0 comments on commit d1b81d6

Please sign in to comment.