@capgo/capacitor-social-login 0.0.49 → 0.0.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -75,22 +75,6 @@ const res = await SocialLogin.login({
75
75
 
76
76
  ### Android configuration
77
77
 
78
- In file `android/app/src/main/AndroidManifest.xml`, add the following XML elements under `<manifest><application>` :
79
-
80
- ```xml
81
- <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
82
- <meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
83
- ```
84
-
85
- In file `android/app/src/main/res/values/strings.xml` add the following lines :
86
-
87
- ```xml
88
- <string name="facebook_app_id">[APP_ID]</string>
89
- <string name="facebook_client_token">[CLIENT_TOKEN]</string>
90
- ```
91
-
92
- Don't forget to replace `[APP_ID]` and `[CLIENT_TOKEN]` by your Facebook application Id.
93
-
94
78
  More information can be found here: https://developers.facebook.com/docs/android/getting-started
95
79
 
96
80
  Then call the `initialize` method with the `facebook` provider
@@ -99,6 +83,7 @@ Then call the `initialize` method with the `facebook` provider
99
83
  await SocialLogin.initialize({
100
84
  facebook: {
101
85
  appId: 'your-app-id',
86
+ clientToken: 'your-client-token',
102
87
  },
103
88
  });
104
89
  const res = await SocialLogin.login({
@@ -8,12 +8,16 @@ import com.facebook.AccessToken;
8
8
  import com.facebook.CallbackManager;
9
9
  import com.facebook.FacebookCallback;
10
10
  import com.facebook.FacebookException;
11
+ import com.facebook.FacebookSdk;
11
12
  import com.facebook.GraphRequest;
12
13
  import com.facebook.GraphResponse;
14
+ import com.facebook.login.LoginBehavior;
13
15
  import com.facebook.login.LoginManager;
14
16
  import com.facebook.login.LoginResult;
17
+ import com.getcapacitor.JSArray;
15
18
  import com.getcapacitor.JSObject;
16
19
  import com.getcapacitor.PluginCall;
20
+ import androidx.activity.result.ActivityResultRegistryOwner;
17
21
  import ee.forgr.capacitor.social.login.helpers.JsonHelper;
18
22
  import ee.forgr.capacitor.social.login.helpers.SocialProvider;
19
23
  import java.util.Collection;
@@ -26,72 +30,99 @@ public class FacebookProvider implements SocialProvider {
26
30
 
27
31
  private Activity activity;
28
32
  private CallbackManager callbackManager;
33
+ private PluginCall savedCall;
29
34
 
30
35
  public FacebookProvider(Activity activity) {
31
36
  this.activity = activity;
32
37
  }
33
38
 
34
- public void initialize(JSONObject _config) {
35
- this.callbackManager = CallbackManager.Factory.create();
36
-
37
- LoginManager.getInstance()
38
- .registerCallback(
39
- callbackManager,
40
- new FacebookCallback<LoginResult>() {
41
- @Override
42
- public void onSuccess(LoginResult loginResult) {
43
- Log.d(LOG_TAG, "LoginManager.onSuccess");
44
- }
45
-
46
- @Override
47
- public void onCancel() {
48
- Log.d(LOG_TAG, "LoginManager.onCancel");
49
- }
50
-
51
- @Override
52
- public void onError(FacebookException exception) {
53
- Log.e(LOG_TAG, "LoginManager.onError", exception);
54
- }
55
- }
56
- );
39
+ public void initialize(JSONObject config) {
40
+ try {
41
+ // Set Facebook App ID
42
+ String facebookAppId = config.getString("appId");
43
+ FacebookSdk.setApplicationId(facebookAppId);
44
+
45
+ // Set Facebook Client Token
46
+ String facebookClientToken = config.getString("clientToken");
47
+ FacebookSdk.setClientToken(facebookClientToken);
48
+
49
+ // Initialize Facebook SDK
50
+ FacebookSdk.sdkInitialize(activity.getApplicationContext());
51
+
52
+ this.callbackManager = CallbackManager.Factory.create();
53
+
54
+ LoginManager.getInstance().registerCallback(callbackManager,
55
+ new FacebookCallback<LoginResult>() {
56
+ @Override
57
+ public void onSuccess(LoginResult loginResult) {
58
+ Log.d(LOG_TAG, "LoginManager.onSuccess");
59
+ }
60
+
61
+ @Override
62
+ public void onCancel() {
63
+ Log.d(LOG_TAG, "LoginManager.onCancel");
64
+ }
65
+
66
+ @Override
67
+ public void onError(FacebookException exception) {
68
+ Log.e(LOG_TAG, "LoginManager.onError", exception);
69
+ }
70
+ });
71
+ } catch (JSONException e) {
72
+ Log.e(LOG_TAG, "Error initializing Facebook SDK", e);
73
+ throw new RuntimeException("Failed to initialize Facebook SDK: " + e.getMessage());
74
+ }
57
75
  }
58
76
 
59
77
  @Override
60
78
  public void login(PluginCall call, JSONObject config) {
79
+ this.savedCall = call;
61
80
  try {
62
- Collection<String> permissions = JsonHelper.jsonArrayToList(
63
- config.getJSONArray("permissions")
64
- );
65
- LoginManager.getInstance()
66
- .registerCallback(
67
- callbackManager,
68
- new FacebookCallback<LoginResult>() {
69
- @Override
70
- public void onSuccess(LoginResult loginResult) {
71
- Log.d(LOG_TAG, "LoginManager.onSuccess");
72
- AccessToken accessToken = loginResult.getAccessToken();
73
- JSObject result = new JSObject();
74
- result.put("accessToken", accessToken.getToken());
75
- result.put("userId", accessToken.getUserId());
76
- call.resolve(result);
77
- }
78
-
79
- @Override
80
- public void onCancel() {
81
- Log.d(LOG_TAG, "LoginManager.onCancel");
82
- call.reject("Login cancelled");
83
- }
84
-
85
- @Override
86
- public void onError(FacebookException exception) {
87
- Log.e(LOG_TAG, "LoginManager.onError", exception);
88
- call.reject(exception.getMessage());
89
- }
90
- }
81
+ Collection<String> permissions = JsonHelper.jsonArrayToList(
82
+ config.getJSONArray("permissions")
91
83
  );
92
- LoginManager.getInstance().logIn(activity, permissions);
84
+ boolean limitedLogin = config.optBoolean("limitedLogin", false);
85
+ String nonce = config.optString("nonce", "");
86
+
87
+ LoginManager.getInstance().registerCallback(callbackManager,
88
+ new FacebookCallback<LoginResult>() {
89
+ @Override
90
+ public void onSuccess(LoginResult loginResult) {
91
+ Log.d(LOG_TAG, "LoginManager.onSuccess");
92
+ AccessToken accessToken = loginResult.getAccessToken();
93
+ JSObject result = new JSObject();
94
+ result.put("accessToken", createAccessTokenObject(accessToken));
95
+ result.put("authenticationToken", loginResult.getAuthenticationToken() != null ? loginResult.getAuthenticationToken().getToken() : null);
96
+ // TODO: Fetch profile information and add it to the result
97
+ savedCall.resolve(result);
98
+ }
99
+
100
+ @Override
101
+ public void onCancel() {
102
+ Log.d(LOG_TAG, "LoginManager.onCancel");
103
+ savedCall.reject("Login cancelled");
104
+ }
105
+
106
+ @Override
107
+ public void onError(FacebookException exception) {
108
+ Log.e(LOG_TAG, "LoginManager.onError", exception);
109
+ savedCall.reject(exception.getMessage());
110
+ }
111
+ });
112
+
113
+ LoginManager loginManager = LoginManager.getInstance();
114
+ if (limitedLogin) {
115
+ Log.w(LOG_TAG, "Limited login is not available for Android");
116
+ }
117
+
118
+ loginManager.setLoginBehavior(LoginBehavior.NATIVE_WITH_FALLBACK);
119
+ if (!nonce.isEmpty()) {
120
+ loginManager.logIn((ActivityResultRegistryOwner) activity, callbackManager, permissions, nonce);
121
+ } else {
122
+ loginManager.logIn((ActivityResultRegistryOwner) activity, callbackManager, permissions);
123
+ }
93
124
  } catch (JSONException e) {
94
- call.reject("Invalid permissions format");
125
+ savedCall.reject("Invalid login options format");
95
126
  }
96
127
  }
97
128
 
@@ -170,6 +201,23 @@ public class FacebookProvider implements SocialProvider {
170
201
  int resultCode,
171
202
  Intent data
172
203
  ) {
173
- return callbackManager.onActivityResult(requestCode, resultCode, data);
204
+ Log.d(LOG_TAG, "FacebookProvider.handleOnActivityResult called");
205
+ if (callbackManager != null) {
206
+ return callbackManager.onActivityResult(requestCode, resultCode, data);
207
+ }
208
+ return false;
209
+ }
210
+
211
+ private JSObject createAccessTokenObject(AccessToken accessToken) {
212
+ JSObject tokenObject = new JSObject();
213
+ tokenObject.put("applicationId", accessToken.getApplicationId());
214
+ tokenObject.put("declinedPermissions", new JSArray(accessToken.getDeclinedPermissions()));
215
+ tokenObject.put("expires", accessToken.getExpires().getTime());
216
+ tokenObject.put("isExpired", accessToken.isExpired());
217
+ tokenObject.put("lastRefresh", accessToken.getLastRefresh().getTime());
218
+ tokenObject.put("permissions", new JSArray(accessToken.getPermissions()));
219
+ tokenObject.put("token", accessToken.getToken());
220
+ tokenObject.put("userId", accessToken.getUserId());
221
+ return tokenObject;
174
222
  }
175
223
  }
@@ -69,11 +69,24 @@ public class SocialLoginPlugin extends Plugin {
69
69
 
70
70
  JSObject facebook = call.getObject("facebook");
71
71
  if (facebook != null) {
72
- FacebookProvider facebookProvider = new FacebookProvider(
73
- this.getActivity()
74
- );
75
- facebookProvider.initialize(new JSONObject());
76
- this.socialProviderHashMap.put("facebook", facebookProvider);
72
+ String facebookAppId = facebook.getString("appId");
73
+ String facebookClientToken = facebook.getString("clientToken");
74
+ if (facebookAppId == null || facebookAppId.isEmpty()) {
75
+ call.reject("facebook.appId is null or empty");
76
+ return;
77
+ }
78
+ if (facebookClientToken == null || facebookClientToken.isEmpty()) {
79
+ call.reject("facebook.clientToken is null or empty");
80
+ return;
81
+ }
82
+ FacebookProvider facebookProvider = new FacebookProvider(this.getActivity());
83
+ try {
84
+ facebookProvider.initialize(facebook);
85
+ this.socialProviderHashMap.put("facebook", facebookProvider);
86
+ } catch (Exception e) {
87
+ call.reject("Failed to initialize Facebook provider: " + e.getMessage());
88
+ return;
89
+ }
77
90
  }
78
91
 
79
92
  call.resolve();
@@ -176,4 +189,24 @@ public class SocialLoginPlugin extends Plugin {
176
189
  Log.e(SocialLoginPlugin.LOG_TAG, "Cannot handle apple login intent");
177
190
  }
178
191
  }
192
+
193
+ @Override
194
+ protected void handleOnActivityResult(int requestCode, int resultCode, Intent data) {
195
+ super.handleOnActivityResult(requestCode, resultCode, data);
196
+
197
+ Log.d(LOG_TAG, "SocialLoginPlugin.handleOnActivityResult called");
198
+
199
+ // Handle Facebook login result
200
+ SocialProvider facebookProvider = socialProviderHashMap.get("facebook");
201
+ if (facebookProvider instanceof FacebookProvider) {
202
+ boolean handled = ((FacebookProvider) facebookProvider).handleOnActivityResult(requestCode, resultCode, data);
203
+ if (handled) {
204
+ Log.d(LOG_TAG, "Facebook activity result handled");
205
+ return;
206
+ }
207
+ }
208
+
209
+ // Handle other providers' activity results if needed
210
+ Log.d(LOG_TAG, "Activity result not handled by any provider");
211
+ }
179
212
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@capgo/capacitor-social-login",
3
- "version": "0.0.49",
3
+ "version": "0.0.50",
4
4
  "description": "All social logins in one plugin",
5
5
  "main": "dist/plugin.cjs.js",
6
6
  "module": "dist/esm/index.js",