From 879810219623c782475edffe666b4df5d5958dff Mon Sep 17 00:00:00 2001 From: Janic Duplessis Date: Fri, 14 Jun 2019 15:43:37 -0400 Subject: [PATCH] Replace logInWith{Read,Publish}Permissions with logInWithPermissions (#552) Also change the `read/PublishPermissions` prop to just `permissions` on the `LoginButton` component. Test Plan: Test using example app --- .../androidsdk/FBLoginButtonManager.java | 28 ++----------- .../androidsdk/FBLoginManagerModule.java | 41 +++--------------- example/ios/Podfile.lock | 42 +++++++++---------- .../RNFBSDKExample.xcodeproj/project.pbxproj | 11 ++--- .../login/RCTFBSDKLoginButtonManager.m | 6 +-- ios/RCTFBSDK/login/RCTFBSDKLoginManager.m | 32 ++++---------- js/FBLoginButton.js | 13 ++---- js/FBLoginManager.js | 15 ++----- 8 files changed, 51 insertions(+), 137 deletions(-) diff --git a/android/src/main/java/com/facebook/reactnative/androidsdk/FBLoginButtonManager.java b/android/src/main/java/com/facebook/reactnative/androidsdk/FBLoginButtonManager.java index 370ca986..3fbe36c2 100644 --- a/android/src/main/java/com/facebook/reactnative/androidsdk/FBLoginButtonManager.java +++ b/android/src/main/java/com/facebook/reactnative/androidsdk/FBLoginButtonManager.java @@ -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 { public static final String REACT_CLASS = "RCTFBLoginButton"; - private ReactApplicationContext mReactApplicationContext; private CallbackManager mCallbackManager; public FBLoginButtonManager(ReactApplicationContext reactApplicationContext, CallbackManager callbackManager) { - mReactApplicationContext = reactApplicationContext; mCallbackManager = callbackManager; } @@ -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); } @@ -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 reactArrayToJavaStringCollection(ReadableArray array) { - List list = new ArrayList<>(); - for (int i = 0; i < array.size(); i++) { - list.add(array.getString(i)); - } - return list; + loginButton.setPermissions(Utility.reactArrayToStringList(publishPermissions)); } } diff --git a/android/src/main/java/com/facebook/reactnative/androidsdk/FBLoginManagerModule.java b/android/src/main/java/com/facebook/reactnative/androidsdk/FBLoginManagerModule.java index 751446c8..c81c9ae3 100644 --- a/android/src/main/java/com/facebook/reactnative/androidsdk/FBLoginManagerModule.java +++ b/android/src/main/java/com/facebook/reactnative/androidsdk/FBLoginManagerModule.java @@ -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; @@ -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; @@ -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; /** @@ -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 * * Facebook login permissions. * @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 - * - * Facebook login permissions. - * @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)); } } @@ -177,12 +154,4 @@ private WritableArray setToWritableArray(Set set) { } return array; } - - private static Collection reactArrayToJavaStringCollection(ReadableArray array) { - HashSet set = new HashSet<>(); - for (int i = 0; i < array.size(); i++) { - set.add(array.getString(i)); - } - return Collections.unmodifiableSet(set); - } } diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index e849d787..0d6f2a91 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -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 diff --git a/example/ios/RNFBSDKExample.xcodeproj/project.pbxproj b/example/ios/RNFBSDKExample.xcodeproj/project.pbxproj index 4a75459a..bde159d8 100644 --- a/example/ios/RNFBSDKExample.xcodeproj/project.pbxproj +++ b/example/ios/RNFBSDKExample.xcodeproj/project.pbxproj @@ -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 = ""; }; 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 = ""; }; 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 */ @@ -63,7 +62,6 @@ isa = PBXGroup; children = ( ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - ED2971642150620600B7C4FE /* JavaScriptCore.framework */, 2D16E6891FA4F8E400B85C8A /* libReact.a */, 870A7DD6F7C14CB1ADF66F14 /* libPods-RNFBSDKExample.a */, ); @@ -78,7 +76,6 @@ 249908D268DE98AF24F835A1 /* Pods-RNFBSDKExample.debug.xcconfig */, C91B992100F02D057FFBC015 /* Pods-RNFBSDKExample.release.xcconfig */, ); - name = Pods; path = Pods; sourceTree = ""; }; @@ -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"; @@ -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 */ = { @@ -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; @@ -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; diff --git a/ios/RCTFBSDK/login/RCTFBSDKLoginButtonManager.m b/ios/RCTFBSDK/login/RCTFBSDKLoginButtonManager.m index f152f6c7..6a02965e 100644 --- a/ios/RCTFBSDK/login/RCTFBSDKLoginButtonManager.m +++ b/ios/RCTFBSDK/login/RCTFBSDKLoginButtonManager.m @@ -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) { @@ -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]; diff --git a/ios/RCTFBSDK/login/RCTFBSDKLoginManager.m b/ios/RCTFBSDK/login/RCTFBSDKLoginManager.m index 54c93e35..d05ed3cb 100644 --- a/ios/RCTFBSDK/login/RCTFBSDKLoginManager.m +++ b/ios/RCTFBSDK/login/RCTFBSDKLoginManager.m @@ -71,30 +71,9 @@ + (BOOL)requiresMainQueueSetup resolve(DefaultAudienceToString([_loginManager defaultAudience])); } -RCT_EXPORT_METHOD(logInWithReadPermissions:(NSStringArray *)permissions +RCT_EXPORT_METHOD(logInWithPermissions:(NSArray *)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) { @@ -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) { diff --git a/js/FBLoginButton.js b/js/FBLoginButton.js index f1885b9a..6b4e2cdd 100644 --- a/js/FBLoginButton.js +++ b/js/FBLoginButton.js @@ -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, - - /** - * Represents the publish permissions to request when the login - * button is pressed. - */ - publishPermissions?: Array, + permissions?: Array, /** * The callback invoked upon error/completion of a login request. @@ -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([ diff --git a/js/FBLoginManager.js b/js/FBLoginManager.js index eefbff86..1287b445 100644 --- a/js/FBLoginManager.js +++ b/js/FBLoginManager.js @@ -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): Promise { - return LoginManager.logInWithReadPermissions(permissions); - }, - - /** - * Logs the user in with the requested publish permissions. - */ - logInWithPublishPermissions( - permissions: Array, - ): Promise { - return LoginManager.logInWithPublishPermissions(permissions); + logInWithPermissions(permissions: Array): Promise { + return LoginManager.logInWithPermissions(permissions); }, /**