@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
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
-
|
|
63
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
)
|
|
75
|
-
|
|
76
|
-
|
|
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
|
}
|