Skip to content
This repository has been archived by the owner on Apr 2, 2021. It is now read-only.

Commit

Permalink
Replace logInWith{Read,Publish}Permissions with logInWithPermissions (#…
Browse files Browse the repository at this point in the history
…552)

Also change the `read/PublishPermissions` prop to just `permissions` on the `LoginButton` component.

Test Plan:

Test using example app
  • Loading branch information
janicduplessis committed Jun 14, 2019
1 parent 628b55a commit 8798102
Show file tree
Hide file tree
Showing 8 changed files with 51 additions and 137 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,18 +31,14 @@
import com.facebook.react.uimanager.SimpleViewManager;
import com.facebook.react.uimanager.ThemedReactContext;

import java.util.ArrayList;
import java.util.List;

public class FBLoginButtonManager extends SimpleViewManager<RCTLoginButton> {

public static final String REACT_CLASS = "RCTFBLoginButton";

private ReactApplicationContext mReactApplicationContext;
private CallbackManager mCallbackManager;

public FBLoginButtonManager(ReactApplicationContext reactApplicationContext, CallbackManager callbackManager) {
mReactApplicationContext = reactApplicationContext;
mCallbackManager = callbackManager;
}

Expand All @@ -53,8 +49,7 @@ public String getName() {

@Override
public RCTLoginButton createViewInstance(ThemedReactContext context) {
RCTLoginButton button = new RCTLoginButton(context, mCallbackManager);
return button;
return new RCTLoginButton(context, mCallbackManager);

}

Expand All @@ -68,25 +63,10 @@ public void setDefaultAudience(RCTLoginButton loginButton, @Nullable String defa
loginButton.setDefaultAudience(DefaultAudience.valueOf(defaultAudience.toUpperCase()));
}

@ReactProp(name = "publishPermissions")
public void setPublishPermissions(
@ReactProp(name = "permissions")
public void setPermissions(
RCTLoginButton loginButton,
@Nullable ReadableArray publishPermissions) {
loginButton.setPublishPermissions(reactArrayToJavaStringCollection(publishPermissions));
}

@ReactProp(name = "readPermissions")
public void setReadPermissions(
RCTLoginButton loginButton,
@Nullable ReadableArray readPermissions){
loginButton.setReadPermissions(reactArrayToJavaStringCollection(readPermissions));
}

private static List<String> reactArrayToJavaStringCollection(ReadableArray array) {
List<String> list = new ArrayList<>();
for (int i = 0; i < array.size(); i++) {
list.add(array.getString(i));
}
return list;
loginButton.setPermissions(Utility.reactArrayToStringList(publishPermissions));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
package com.facebook.reactnative.androidsdk;

import android.app.Activity;
import android.content.Intent;

import com.facebook.AccessToken;
import com.facebook.CallbackManager;
Expand All @@ -30,7 +29,6 @@
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
Expand All @@ -40,9 +38,6 @@
import com.facebook.react.bridge.WritableArray;
import com.facebook.react.bridge.WritableMap;

import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

/**
Expand Down Expand Up @@ -135,38 +130,20 @@ public void logOut() {
}

/**
* Attempts a Facebook login with the specified read permissions.
* @param permissions must be one of the provided read permissions. See
* Attempts a Facebook login with the specified permissions.
* @param permissions must be one of the provided permissions. See
* <a href="https://developers.facebook.com/docs/facebook-login/permissions">
* Facebook login permissions</a>.
* @param promise Use promise to pass login result to JS after login finish.
*/
@ReactMethod
public void logInWithReadPermissions(ReadableArray permissions, final Promise promise) {
public void logInWithPermissions(ReadableArray permissions, final Promise promise) {
final LoginManager loginManager = LoginManager.getInstance();
loginManager.registerCallback(mCallbackManager, new LoginManagerCallback(promise));
Activity activity = getCurrentActivity();
if (activity != null) {
loginManager.logInWithReadPermissions(activity,
reactArrayToJavaStringCollection(permissions));
}
}

/**
* Attempts a Facebook login with the specified publish permissions.
* @param permissions must be one of the provided publish permissions. See
* <a href="https://developers.facebook.com/docs/facebook-login/permissions">
* Facebook login permissions</a>.
* @param promise Use promise to pass login result to JS after login finish.
*/
@ReactMethod
public void logInWithPublishPermissions(ReadableArray permissions, final Promise promise) {
final LoginManager loginManager = LoginManager.getInstance();
loginManager.registerCallback(mCallbackManager, new LoginManagerCallback(promise));
Activity activity = getCurrentActivity();
if (activity != null) {
loginManager.logInWithPublishPermissions(activity,
reactArrayToJavaStringCollection(permissions));
loginManager.logIn(activity,
Utility.reactArrayToStringList(permissions));
}
}

Expand All @@ -177,12 +154,4 @@ private WritableArray setToWritableArray(Set<String> set) {
}
return array;
}

private static Collection<String> reactArrayToJavaStringCollection(ReadableArray array) {
HashSet<String> set = new HashSet<>();
for (int i = 0; i < array.size(); i++) {
set.add(array.getString(i));
}
return Collections.unmodifiableSet(set);
}
}
42 changes: 21 additions & 21 deletions example/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -195,27 +195,27 @@ SPEC CHECKSUMS:
FBSDKShareKit: 8695bbb97c18a381bbf2851a3f24f95a59121b82
Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51
glog: 1f3da668190260b06b429bb211bfbee5cd790c28
React: c438ccc7e14e86d4702bb92d7e262f549ffaa995
React-Core: c76495f5c14e73c0f803b89c3fa83f804da61bd6
React-cxxreact: f64bc64cf4682d6ea5a064f6017da72482858682
React-DevSupport: 30336bca00f72681eac995d21a31b963e7d5cfec
React-fishhook: 73dc8058ca42828cc92e8fbba6cd9571100e10ca
React-jsi: 40f467ff088c811c6630acccb4aea57ea7ccb1b5
React-jsiexecutor: e4b4717060a0cd8d0270323b5655a68c95432efd
React-jsinspector: 044105eea064aec81adc5e4d777a8f6589e7d094
react-native-fbsdk: 73370971d27ac3c73716e9431093e1a4388289cc
React-RCTActionSheet: 08864c609d9f959abf3d51fdd93f8bc6e91f21eb
React-RCTAnimation: a4547e9fac2627ded3df9d302f5558b475faf819
React-RCTBlob: 62d5c263a2adb8f7a2cafd601beba18a2d99cbbb
React-RCTImage: 963859de2b05d2037d1b7842cdbddc8d7f3a2f3b
React-RCTLinking: 5998a7db9a6156ed112b006d01f76b2d1cc83d98
React-RCTNetwork: 0b676e8194f3f893db813007d37e37e9820173a3
React-RCTSettings: fdd7606f1b6050eced69fc6046d5db6768aefd57
React-RCTText: 36c0532feb5521cb295ba80e7e44b70cf1c36fc7
React-RCTVibration: dabb8d59bb47e1d9124b3f77bfdc1b33d42b0a74
React-RCTWebSocket: f32b93e0953d7c07fd5dd45305406282cfdc95cf
yoga: 88c514f310aff89b94a14c5fbf44b95735af0cb7
React: 771da41f95c2938a4268d0064dae874efca76d47
React-Core: c6be9e64310cda9bded86059005a2be9cfcd83d1
React-cxxreact: 17ab2493f0071b3587a2fa8874d374ab6df17d91
React-DevSupport: e47afce62e4d32d81df53ec593bf490101954c63
React-fishhook: 689293b246ac0d2aa2aae7bac08719d69ff4b6db
React-jsi: 6d2a594ad2281e6646fa3ac665b95554d0e3c0b1
React-jsiexecutor: 418cedeadc8ae5096574e6b199a6b025734397d5
React-jsinspector: 3d54eec4e664fad1fe6ecf3fb2554b53d379fb9f
react-native-fbsdk: 906887ad3b903b75e50b07683cf7c37f1b73e310
React-RCTActionSheet: 37f59304f286148e9bf0fdd8683e6d959998bd58
React-RCTAnimation: 43948fbaed6ac32285130d0bf6543d685d271d01
React-RCTBlob: f7614a4b3631c8c0048516972cb48ab21e3229f7
React-RCTImage: 0af567e4ecc3fe76469ccd93e25f8403aa953917
React-RCTLinking: c26bd5665a0226654e7d33f674bb0083a5f8822b
React-RCTNetwork: 467aab0787fb8d940be0767de88f18c6d3fbda24
React-RCTSettings: 79d28ecf44cf144432c1001bbca2e93d4d7a4e7f
React-RCTText: 1b3e71979b7de522c797d5c437107897f0f8aa48
React-RCTVibration: d3a10d7c6c55df9021432a0a33507331757a302b
React-RCTWebSocket: ea37aa224c6c3dab458b142c0d17c42b3f80e989
yoga: 6cc9ed1b0509efe6b6519dc5f44af3c7b9dfb7a5

PODFILE CHECKSUM: 166764d2c07190c305e293455e6e35c162854eb0

COCOAPODS: 1.5.3
COCOAPODS: 1.6.1
11 changes: 4 additions & 7 deletions example/ios/RNFBSDKExample.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
B8B51A8B9E573C31AA602BB8 /* Pods-RNFBSDKExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNFBSDKExample.debug.xcconfig"; path = "Target Support Files/Pods-RNFBSDKExample/Pods-RNFBSDKExample.debug.xcconfig"; sourceTree = "<group>"; };
C91B992100F02D057FFBC015 /* Pods-RNFBSDKExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNFBSDKExample.release.xcconfig"; path = "Pods/Target Support Files/Pods-RNFBSDKExample/Pods-RNFBSDKExample.release.xcconfig"; sourceTree = "<group>"; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand Down Expand Up @@ -63,7 +62,6 @@
isa = PBXGroup;
children = (
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
ED2971642150620600B7C4FE /* JavaScriptCore.framework */,
2D16E6891FA4F8E400B85C8A /* libReact.a */,
870A7DD6F7C14CB1ADF66F14 /* libPods-RNFBSDKExample.a */,
);
Expand All @@ -78,7 +76,6 @@
249908D268DE98AF24F835A1 /* Pods-RNFBSDKExample.debug.xcconfig */,
C91B992100F02D057FFBC015 /* Pods-RNFBSDKExample.release.xcconfig */,
);
name = Pods;
path = Pods;
sourceTree = "<group>";
};
Expand Down Expand Up @@ -189,7 +186,7 @@
inputFileListPaths = (
);
inputPaths = (
"${SRCROOT}/Pods/Target Support Files/Pods-RNFBSDKExample/Pods-RNFBSDKExample-resources.sh",
"${PODS_ROOT}/Target Support Files/Pods-RNFBSDKExample/Pods-RNFBSDKExample-resources.sh",
"${PODS_ROOT}/FBSDKCoreKit/FacebookSDKStrings.bundle",
);
name = "[CP] Copy Pods Resources";
Expand All @@ -200,7 +197,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-RNFBSDKExample/Pods-RNFBSDKExample-resources.sh\"\n";
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RNFBSDKExample/Pods-RNFBSDKExample-resources.sh\"\n";
showEnvVarsInLog = 0;
};
E3AE85C98B0DE57952EBBE93 /* [CP] Check Pods Manifest.lock */ = {
Expand Down Expand Up @@ -254,7 +251,7 @@
/* Begin XCBuildConfiguration section */
13B07F941A680F5B00A75B9A /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 249908D268DE98AF24F835A1 /* Pods-RNFBSDKExample.debug.xcconfig */;
baseConfigurationReference = B8B51A8B9E573C31AA602BB8 /* Pods-RNFBSDKExample.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = 1;
Expand All @@ -274,7 +271,7 @@
};
13B07F951A680F5B00A75B9A /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = C91B992100F02D057FFBC015 /* Pods-RNFBSDKExample.release.xcconfig */;
baseConfigurationReference = 0EF5B78486F2856ACDCEA373 /* Pods-RNFBSDKExample.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = 1;
Expand Down
6 changes: 2 additions & 4 deletions ios/RCTFBSDK/login/RCTFBSDKLoginButtonManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,7 @@ - (UIView *)view

#pragma mark - Properties

RCT_EXPORT_VIEW_PROPERTY(readPermissions, NSStringArray)

RCT_EXPORT_VIEW_PROPERTY(publishPermissions, NSStringArray)
RCT_EXPORT_VIEW_PROPERTY(permissions, NSStringArray)

RCT_CUSTOM_VIEW_PROPERTY(loginBehaviorIOS, FBSDKLoginBehavior, FBSDKLoginButton)
{
Expand All @@ -70,7 +68,7 @@ - (void)loginButton:(FBSDKLoginButton *)loginButton didCompleteWithResult:(FBSDK
@"declinedPermissions": result.isCancelled ? [NSNull null] : result.declinedPermissions.allObjects,
},
};

RCTComponentEvent *event = [[RCTComponentEvent alloc] initWithName:@"topChange"
viewTag:loginButton.reactTag
body:body];
Expand Down
32 changes: 9 additions & 23 deletions ios/RCTFBSDK/login/RCTFBSDKLoginManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -71,30 +71,9 @@ + (BOOL)requiresMainQueueSetup
resolve(DefaultAudienceToString([_loginManager defaultAudience]));
}

RCT_EXPORT_METHOD(logInWithReadPermissions:(NSStringArray *)permissions
RCT_EXPORT_METHOD(logInWithPermissions:(NSArray<NSString *> *)permissions
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)
{
[self _loginWithPermissions:permissions resolver:resolve rejecter:reject];
};

RCT_EXPORT_METHOD(logInWithPublishPermissions:(NSStringArray *)permissions
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)
{
[self _loginWithPermissions:permissions resolver:resolve rejecter:reject];
};

RCT_EXPORT_METHOD(logOut)
{
[_loginManager logOut];
};

#pragma mark - Helper Methods

- (void)_loginWithPermissions:(NSStringArray *)permissions
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject
{
FBSDKLoginManagerLoginResultBlock requestHandler = ^(FBSDKLoginManagerLoginResult *result, NSError *error) {
if (error) {
Expand All @@ -105,7 +84,14 @@ - (void)_loginWithPermissions:(NSStringArray *)permissions
};

[_loginManager logInWithPermissions:permissions fromViewController:nil handler:requestHandler];
}
};

RCT_EXPORT_METHOD(logOut)
{
[_loginManager logOut];
};

#pragma mark - Helper Methods

static NSDictionary *RCTBuildResultDictionary(FBSDKLoginManagerLoginResult *result)
{
Expand Down
13 changes: 3 additions & 10 deletions js/FBLoginButton.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,16 +41,10 @@ type TooltipBehaviorIOS = 'auto' | 'force_display' | 'disable';
*/
class LoginButton extends React.Component<{
/**
* Represents the read permissions to request when the login button
* Represents the permissions to request when the login button
* is pressed.
*/
readPermissions?: Array<string>,

/**
* Represents the publish permissions to request when the login
* button is pressed.
*/
publishPermissions?: Array<string>,
permissions?: Array<string>,

/**
* The callback invoked upon error/completion of a login request.
Expand Down Expand Up @@ -121,8 +115,7 @@ class LoginButton extends React.Component<{
* v0.43.0 was deployed */
LoginButton.propTypes = {
...ViewPropTypes,
readPermissions: PropTypes.arrayOf(PropTypes.string),
publishPermissions: PropTypes.arrayOf(PropTypes.string),
permissions: PropTypes.arrayOf(PropTypes.string),
onLoginFinished: PropTypes.func,
onLogoutFinished: PropTypes.func,
loginBehaviorAndroid: PropTypes.oneOf([
Expand Down
15 changes: 3 additions & 12 deletions js/FBLoginManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,19 +62,10 @@ export type LoginResult = {

module.exports = {
/**
* Logs the user in with the requested read permissions.
* Logs the user in with the requested permissions.
*/
logInWithReadPermissions(permissions: Array<string>): Promise<LoginResult> {
return LoginManager.logInWithReadPermissions(permissions);
},

/**
* Logs the user in with the requested publish permissions.
*/
logInWithPublishPermissions(
permissions: Array<string>,
): Promise<LoginResult> {
return LoginManager.logInWithPublishPermissions(permissions);
logInWithPermissions(permissions: Array<string>): Promise<LoginResult> {
return LoginManager.logInWithPermissions(permissions);
},

/**
Expand Down

0 comments on commit 8798102

Please sign in to comment.