@ohos-ports/react-native-fbsdk-next 13.4.3-beta.0
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/LICENSE +21 -0
- package/README.md +943 -0
- package/android/build.gradle +57 -0
- package/android/src/main/AndroidManifest.xml +46 -0
- package/android/src/main/java/com/facebook/reactnative/androidsdk/FBAccessTokenModule.java +151 -0
- package/android/src/main/java/com/facebook/reactnative/androidsdk/FBActivityEventListener.java +40 -0
- package/android/src/main/java/com/facebook/reactnative/androidsdk/FBAppEventsLoggerModule.java +414 -0
- package/android/src/main/java/com/facebook/reactnative/androidsdk/FBAppLinkModule.java +86 -0
- package/android/src/main/java/com/facebook/reactnative/androidsdk/FBGameRequestDialogModule.java +94 -0
- package/android/src/main/java/com/facebook/reactnative/androidsdk/FBGraphRequestModule.java +283 -0
- package/android/src/main/java/com/facebook/reactnative/androidsdk/FBLoginButtonManager.java +83 -0
- package/android/src/main/java/com/facebook/reactnative/androidsdk/FBLoginManagerModule.java +171 -0
- package/android/src/main/java/com/facebook/reactnative/androidsdk/FBMessageDialogModule.java +111 -0
- package/android/src/main/java/com/facebook/reactnative/androidsdk/FBProfileModule.java +68 -0
- package/android/src/main/java/com/facebook/reactnative/androidsdk/FBSDKCallbackManagerBaseJavaModule.java +41 -0
- package/android/src/main/java/com/facebook/reactnative/androidsdk/FBSDKPackage.java +60 -0
- package/android/src/main/java/com/facebook/reactnative/androidsdk/FBSendButtonManager.java +51 -0
- package/android/src/main/java/com/facebook/reactnative/androidsdk/FBSettingsModule.java +95 -0
- package/android/src/main/java/com/facebook/reactnative/androidsdk/FBShareButtonManager.java +53 -0
- package/android/src/main/java/com/facebook/reactnative/androidsdk/FBShareDialogModule.java +107 -0
- package/android/src/main/java/com/facebook/reactnative/androidsdk/RCTLoginButton.java +126 -0
- package/android/src/main/java/com/facebook/reactnative/androidsdk/RCTLoginButtonEvent.java +27 -0
- package/android/src/main/java/com/facebook/reactnative/androidsdk/ReactNativeFacebookSDKCallback.java +58 -0
- package/android/src/main/java/com/facebook/reactnative/androidsdk/Utility.java +283 -0
- package/app.plugin.js +1 -0
- package/expo-module.config.json +10 -0
- package/ios/ExpoAdapterFBSDKNext/FacebookAppDelegate.swift +21 -0
- package/ios/ExpoAdapterFBSDKNext.podspec +33 -0
- package/ios/RCTFBSDK/core/RCTConvert+FBSDKAccessToken.h +27 -0
- package/ios/RCTFBSDK/core/RCTConvert+FBSDKAccessToken.m +41 -0
- package/ios/RCTFBSDK/core/RCTFBSDKAEMReporter.m +30 -0
- package/ios/RCTFBSDK/core/RCTFBSDKAccessToken.h +24 -0
- package/ios/RCTFBSDK/core/RCTFBSDKAccessToken.m +115 -0
- package/ios/RCTFBSDK/core/RCTFBSDKAppEvents.h +24 -0
- package/ios/RCTFBSDK/core/RCTFBSDKAppEvents.m +251 -0
- package/ios/RCTFBSDK/core/RCTFBSDKAppLink.h +24 -0
- package/ios/RCTFBSDK/core/RCTFBSDKAppLink.m +52 -0
- package/ios/RCTFBSDK/core/RCTFBSDKAuthenticationToken.h +6 -0
- package/ios/RCTFBSDK/core/RCTFBSDKAuthenticationToken.m +35 -0
- package/ios/RCTFBSDK/core/RCTFBSDKGraphRequestConnectionContainer.h +50 -0
- package/ios/RCTFBSDK/core/RCTFBSDKGraphRequestConnectionContainer.m +124 -0
- package/ios/RCTFBSDK/core/RCTFBSDKGraphRequestManager.h +25 -0
- package/ios/RCTFBSDK/core/RCTFBSDKGraphRequestManager.m +43 -0
- package/ios/RCTFBSDK/core/RCTFBSDKProfile.h +6 -0
- package/ios/RCTFBSDK/core/RCTFBSDKProfile.m +58 -0
- package/ios/RCTFBSDK/core/RCTFBSDKSettings.h +14 -0
- package/ios/RCTFBSDK/core/RCTFBSDKSettings.m +80 -0
- package/ios/RCTFBSDK/login/RCTConvert+FBSDKLogin.h +28 -0
- package/ios/RCTFBSDK/login/RCTConvert+FBSDKLogin.m +35 -0
- package/ios/RCTFBSDK/login/RCTFBSDKLoginButtonManager.h +25 -0
- package/ios/RCTFBSDK/login/RCTFBSDKLoginButtonManager.m +73 -0
- package/ios/RCTFBSDK/login/RCTFBSDKLoginButtonView.h +12 -0
- package/ios/RCTFBSDK/login/RCTFBSDKLoginButtonView.m +57 -0
- package/ios/RCTFBSDK/login/RCTFBSDKLoginManager.h +22 -0
- package/ios/RCTFBSDK/login/RCTFBSDKLoginManager.m +154 -0
- package/ios/RCTFBSDK/share/RCTConvert+FBSDKSharingContent.h +29 -0
- package/ios/RCTFBSDK/share/RCTConvert+FBSDKSharingContent.m +111 -0
- package/ios/RCTFBSDK/share/RCTFBSDKGameRequestDialog.h +24 -0
- package/ios/RCTFBSDK/share/RCTFBSDKGameRequestDialog.m +134 -0
- package/ios/RCTFBSDK/share/RCTFBSDKMessageDialog.h +24 -0
- package/ios/RCTFBSDK/share/RCTFBSDKMessageDialog.m +116 -0
- package/ios/RCTFBSDK/share/RCTFBSDKSendButtonManager.h +25 -0
- package/ios/RCTFBSDK/share/RCTFBSDKSendButtonManager.m +39 -0
- package/ios/RCTFBSDK/share/RCTFBSDKShareButtonManager.h +23 -0
- package/ios/RCTFBSDK/share/RCTFBSDKShareButtonManager.m +39 -0
- package/ios/RCTFBSDK/share/RCTFBSDKShareDialog.h +24 -0
- package/ios/RCTFBSDK/share/RCTFBSDKShareDialog.m +134 -0
- package/ios/RCTFBSDK/share/RCTFBSDKShareHelper.h +21 -0
- package/ios/RCTFBSDK/share/RCTFBSDKShareHelper.m +32 -0
- package/ios/RCTFBSDK.xcodeproj/project.pbxproj +446 -0
- package/ios/RCTFBSDK.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/ios/RCTFBSDK.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/jest/mocks/index.js +81 -0
- package/jest/setup.js +3 -0
- package/lib/commonjs/FBAEMReporter.js +39 -0
- package/lib/commonjs/FBAEMReporter.js.map +1 -0
- package/lib/commonjs/FBAccessToken.js +198 -0
- package/lib/commonjs/FBAccessToken.js.map +1 -0
- package/lib/commonjs/FBAppEventsLogger.js +221 -0
- package/lib/commonjs/FBAppEventsLogger.js.map +1 -0
- package/lib/commonjs/FBAppLink.js +36 -0
- package/lib/commonjs/FBAppLink.js.map +1 -0
- package/lib/commonjs/FBAuthenticationToken.js +55 -0
- package/lib/commonjs/FBAuthenticationToken.js.map +1 -0
- package/lib/commonjs/FBGameRequestDialog.js +45 -0
- package/lib/commonjs/FBGameRequestDialog.js.map +1 -0
- package/lib/commonjs/FBGraphRequest.js +66 -0
- package/lib/commonjs/FBGraphRequest.js.map +1 -0
- package/lib/commonjs/FBGraphRequestManager.js +96 -0
- package/lib/commonjs/FBGraphRequestManager.js.map +1 -0
- package/lib/commonjs/FBLoginButton.js +67 -0
- package/lib/commonjs/FBLoginButton.js.map +1 -0
- package/lib/commonjs/FBLoginManager.js +102 -0
- package/lib/commonjs/FBLoginManager.js.map +1 -0
- package/lib/commonjs/FBMessageDialog.js +51 -0
- package/lib/commonjs/FBMessageDialog.js.map +1 -0
- package/lib/commonjs/FBProfile.js +134 -0
- package/lib/commonjs/FBProfile.js.map +1 -0
- package/lib/commonjs/FBSendButton.js +48 -0
- package/lib/commonjs/FBSendButton.js.map +1 -0
- package/lib/commonjs/FBSettings.js +115 -0
- package/lib/commonjs/FBSettings.js.map +1 -0
- package/lib/commonjs/FBShareButton.js +48 -0
- package/lib/commonjs/FBShareButton.js.map +1 -0
- package/lib/commonjs/FBShareDialog.js +57 -0
- package/lib/commonjs/FBShareDialog.js.map +1 -0
- package/lib/commonjs/index.js +323 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/models/FBAppGroupCreationContent.js +2 -0
- package/lib/commonjs/models/FBAppGroupCreationContent.js.map +1 -0
- package/lib/commonjs/models/FBGameRequestContent.js +2 -0
- package/lib/commonjs/models/FBGameRequestContent.js.map +1 -0
- package/lib/commonjs/models/FBSDKCallback.js +2 -0
- package/lib/commonjs/models/FBSDKCallback.js.map +1 -0
- package/lib/commonjs/models/FBShareContent.js +6 -0
- package/lib/commonjs/models/FBShareContent.js.map +1 -0
- package/lib/commonjs/models/FBShareLinkContent.js +6 -0
- package/lib/commonjs/models/FBShareLinkContent.js.map +1 -0
- package/lib/commonjs/models/FBSharePhoto.js +2 -0
- package/lib/commonjs/models/FBSharePhoto.js.map +1 -0
- package/lib/commonjs/models/FBSharePhotoContent.js +6 -0
- package/lib/commonjs/models/FBSharePhotoContent.js.map +1 -0
- package/lib/commonjs/models/FBShareVideo.js +2 -0
- package/lib/commonjs/models/FBShareVideo.js.map +1 -0
- package/lib/commonjs/models/FBShareVideoContent.js +6 -0
- package/lib/commonjs/models/FBShareVideoContent.js.map +1 -0
- package/lib/commonjs/util/validate.js +180 -0
- package/lib/commonjs/util/validate.js.map +1 -0
- package/lib/commonjs/utils/index.js +2 -0
- package/lib/commonjs/utils/index.js.map +1 -0
- package/lib/module/FBAEMReporter.js +34 -0
- package/lib/module/FBAEMReporter.js.map +1 -0
- package/lib/module/FBAccessToken.js +191 -0
- package/lib/module/FBAccessToken.js.map +1 -0
- package/lib/module/FBAppEventsLogger.js +215 -0
- package/lib/module/FBAppEventsLogger.js.map +1 -0
- package/lib/module/FBAppLink.js +29 -0
- package/lib/module/FBAppLink.js.map +1 -0
- package/lib/module/FBAuthenticationToken.js +48 -0
- package/lib/module/FBAuthenticationToken.js.map +1 -0
- package/lib/module/FBGameRequestDialog.js +39 -0
- package/lib/module/FBGameRequestDialog.js.map +1 -0
- package/lib/module/FBGraphRequest.js +60 -0
- package/lib/module/FBGraphRequest.js.map +1 -0
- package/lib/module/FBGraphRequestManager.js +90 -0
- package/lib/module/FBGraphRequestManager.js.map +1 -0
- package/lib/module/FBLoginButton.js +62 -0
- package/lib/module/FBLoginButton.js.map +1 -0
- package/lib/module/FBLoginManager.js +97 -0
- package/lib/module/FBLoginManager.js.map +1 -0
- package/lib/module/FBMessageDialog.js +45 -0
- package/lib/module/FBMessageDialog.js.map +1 -0
- package/lib/module/FBProfile.js +127 -0
- package/lib/module/FBProfile.js.map +1 -0
- package/lib/module/FBSendButton.js +41 -0
- package/lib/module/FBSendButton.js.map +1 -0
- package/lib/module/FBSettings.js +108 -0
- package/lib/module/FBSettings.js.map +1 -0
- package/lib/module/FBShareButton.js +41 -0
- package/lib/module/FBShareButton.js.map +1 -0
- package/lib/module/FBShareDialog.js +51 -0
- package/lib/module/FBShareDialog.js.map +1 -0
- package/lib/module/index.js +44 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/models/FBAppGroupCreationContent.js +2 -0
- package/lib/module/models/FBAppGroupCreationContent.js.map +1 -0
- package/lib/module/models/FBGameRequestContent.js +2 -0
- package/lib/module/models/FBGameRequestContent.js.map +1 -0
- package/lib/module/models/FBSDKCallback.js +2 -0
- package/lib/module/models/FBSDKCallback.js.map +1 -0
- package/lib/module/models/FBShareContent.js +2 -0
- package/lib/module/models/FBShareContent.js.map +1 -0
- package/lib/module/models/FBShareLinkContent.js +2 -0
- package/lib/module/models/FBShareLinkContent.js.map +1 -0
- package/lib/module/models/FBSharePhoto.js +2 -0
- package/lib/module/models/FBSharePhoto.js.map +1 -0
- package/lib/module/models/FBSharePhotoContent.js +2 -0
- package/lib/module/models/FBSharePhotoContent.js.map +1 -0
- package/lib/module/models/FBShareVideo.js +2 -0
- package/lib/module/models/FBShareVideo.js.map +1 -0
- package/lib/module/models/FBShareVideoContent.js +2 -0
- package/lib/module/models/FBShareVideoContent.js.map +1 -0
- package/lib/module/util/validate.js +157 -0
- package/lib/module/util/validate.js.map +1 -0
- package/lib/module/utils/index.js +2 -0
- package/lib/module/utils/index.js.map +1 -0
- package/lib/typescript/FBAEMReporter.d.ts +21 -0
- package/lib/typescript/FBAEMReporter.d.ts.map +1 -0
- package/lib/typescript/FBAccessToken.d.ts +118 -0
- package/lib/typescript/FBAccessToken.d.ts.map +1 -0
- package/lib/typescript/FBAppEventsLogger.d.ts +201 -0
- package/lib/typescript/FBAppEventsLogger.d.ts.map +1 -0
- package/lib/typescript/FBAppLink.d.ts +5 -0
- package/lib/typescript/FBAppLink.d.ts.map +1 -0
- package/lib/typescript/FBAuthenticationToken.d.ts +29 -0
- package/lib/typescript/FBAuthenticationToken.d.ts.map +1 -0
- package/lib/typescript/FBGameRequestDialog.d.ts +39 -0
- package/lib/typescript/FBGameRequestDialog.d.ts.map +1 -0
- package/lib/typescript/FBGraphRequest.d.ts +70 -0
- package/lib/typescript/FBGraphRequest.d.ts.map +1 -0
- package/lib/typescript/FBGraphRequestManager.d.ts +51 -0
- package/lib/typescript/FBGraphRequestManager.d.ts.map +1 -0
- package/lib/typescript/FBLoginButton.d.ts +92 -0
- package/lib/typescript/FBLoginButton.d.ts.map +1 -0
- package/lib/typescript/FBLoginManager.d.ts +77 -0
- package/lib/typescript/FBLoginManager.d.ts.map +1 -0
- package/lib/typescript/FBMessageDialog.d.ts +42 -0
- package/lib/typescript/FBMessageDialog.d.ts.map +1 -0
- package/lib/typescript/FBProfile.d.ts +127 -0
- package/lib/typescript/FBProfile.d.ts.map +1 -0
- package/lib/typescript/FBSendButton.d.ts +42 -0
- package/lib/typescript/FBSendButton.d.ts.map +1 -0
- package/lib/typescript/FBSettings.d.ts +49 -0
- package/lib/typescript/FBSettings.d.ts.map +1 -0
- package/lib/typescript/FBShareButton.d.ts +42 -0
- package/lib/typescript/FBShareButton.d.ts.map +1 -0
- package/lib/typescript/FBShareDialog.d.ts +69 -0
- package/lib/typescript/FBShareDialog.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +43 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/models/FBAppGroupCreationContent.d.ts +43 -0
- package/lib/typescript/models/FBAppGroupCreationContent.d.ts.map +1 -0
- package/lib/typescript/models/FBGameRequestContent.d.ts +63 -0
- package/lib/typescript/models/FBGameRequestContent.d.ts.map +1 -0
- package/lib/typescript/models/FBSDKCallback.d.ts +4 -0
- package/lib/typescript/models/FBSDKCallback.d.ts.map +1 -0
- package/lib/typescript/models/FBShareContent.d.ts +48 -0
- package/lib/typescript/models/FBShareContent.d.ts.map +1 -0
- package/lib/typescript/models/FBShareLinkContent.d.ts +65 -0
- package/lib/typescript/models/FBShareLinkContent.d.ts.map +1 -0
- package/lib/typescript/models/FBSharePhoto.d.ts +43 -0
- package/lib/typescript/models/FBSharePhoto.d.ts.map +1 -0
- package/lib/typescript/models/FBSharePhotoContent.d.ts +45 -0
- package/lib/typescript/models/FBSharePhotoContent.d.ts.map +1 -0
- package/lib/typescript/models/FBShareVideo.d.ts +31 -0
- package/lib/typescript/models/FBShareVideo.d.ts.map +1 -0
- package/lib/typescript/models/FBShareVideoContent.d.ts +58 -0
- package/lib/typescript/models/FBShareVideoContent.d.ts.map +1 -0
- package/lib/typescript/util/validate.d.ts +62 -0
- package/lib/typescript/util/validate.d.ts.map +1 -0
- package/lib/typescript/utils/index.d.ts +2 -0
- package/lib/typescript/utils/index.d.ts.map +1 -0
- package/package.json +155 -0
- package/plugin/build/config.d.ts +53 -0
- package/plugin/build/config.js +46 -0
- package/plugin/build/withFacebook.d.ts +4 -0
- package/plugin/build/withFacebook.js +59 -0
- package/plugin/build/withFacebookAndroid.d.ts +6 -0
- package/plugin/build/withFacebookAndroid.js +197 -0
- package/plugin/build/withFacebookIOS.d.ts +15 -0
- package/plugin/build/withFacebookIOS.js +163 -0
- package/plugin/build/withSKAdNetworkIdentifiers.d.ts +9 -0
- package/plugin/build/withSKAdNetworkIdentifiers.js +36 -0
- package/plugin/tsconfig.json +9 -0
- package/react-native-fbsdk-next.podspec +34 -0
- package/src/FBAEMReporter.ts +44 -0
- package/src/FBAccessToken.ts +222 -0
- package/src/FBAppEventsLogger.ts +375 -0
- package/src/FBAppLink.ts +30 -0
- package/src/FBAuthenticationToken.ts +61 -0
- package/src/FBGameRequestDialog.ts +49 -0
- package/src/FBGraphRequest.ts +89 -0
- package/src/FBGraphRequestManager.ts +117 -0
- package/src/FBLoginButton.tsx +152 -0
- package/src/FBLoginManager.ts +133 -0
- package/src/FBMessageDialog.ts +53 -0
- package/src/FBProfile.ts +166 -0
- package/src/FBSendButton.tsx +61 -0
- package/src/FBSettings.ts +122 -0
- package/src/FBShareButton.tsx +61 -0
- package/src/FBShareDialog.ts +96 -0
- package/src/index.ts +85 -0
- package/src/models/FBAppGroupCreationContent.ts +48 -0
- package/src/models/FBGameRequestContent.ts +81 -0
- package/src/models/FBSDKCallback.ts +3 -0
- package/src/models/FBShareContent.ts +54 -0
- package/src/models/FBShareLinkContent.ts +71 -0
- package/src/models/FBSharePhoto.ts +45 -0
- package/src/models/FBSharePhotoContent.ts +48 -0
- package/src/models/FBShareVideo.ts +31 -0
- package/src/models/FBShareVideoContent.ts +64 -0
- package/src/util/validate.ts +167 -0
- package/src/utils/index.ts +1 -0
- package/tsconfig.json +103 -0
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
|
|
3
|
+
* <p/>
|
|
4
|
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
|
|
5
|
+
* copy, modify, and distribute this software in source code or binary form for use
|
|
6
|
+
* in connection with the web services and APIs provided by Facebook.
|
|
7
|
+
* <p/>
|
|
8
|
+
* As with any software that integrates with the Facebook platform, your use of
|
|
9
|
+
* this software is subject to the Facebook Developer Principles and Policies
|
|
10
|
+
* [http://developers.facebook.com/policy/]. This copyright notice shall be
|
|
11
|
+
* included in all copies or substantial portions of the software.
|
|
12
|
+
* <p/>
|
|
13
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
15
|
+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
16
|
+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
17
|
+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
18
|
+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
package com.facebook.reactnative.androidsdk;
|
|
22
|
+
|
|
23
|
+
import android.os.Bundle;
|
|
24
|
+
import android.util.SparseArray;
|
|
25
|
+
|
|
26
|
+
import com.facebook.AccessToken;
|
|
27
|
+
import com.facebook.FacebookRequestError;
|
|
28
|
+
import com.facebook.GraphRequest;
|
|
29
|
+
import com.facebook.GraphRequestBatch;
|
|
30
|
+
import com.facebook.GraphResponse;
|
|
31
|
+
import com.facebook.HttpMethod;
|
|
32
|
+
import com.facebook.react.bridge.Arguments;
|
|
33
|
+
import com.facebook.react.bridge.Callback;
|
|
34
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
35
|
+
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
36
|
+
import com.facebook.react.bridge.ReactMethod;
|
|
37
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
38
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
39
|
+
import com.facebook.react.bridge.ReadableMapKeySetIterator;
|
|
40
|
+
import com.facebook.react.bridge.WritableArray;
|
|
41
|
+
import com.facebook.react.bridge.WritableMap;
|
|
42
|
+
import com.facebook.react.module.annotations.ReactModule;
|
|
43
|
+
|
|
44
|
+
import org.json.JSONArray;
|
|
45
|
+
import org.json.JSONException;
|
|
46
|
+
import org.json.JSONObject;
|
|
47
|
+
|
|
48
|
+
import java.util.HashMap;
|
|
49
|
+
import java.util.Iterator;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* FBGraphRequestModule holds a list of request objects and send them to Facebook in a single
|
|
53
|
+
* round-trip.
|
|
54
|
+
*/
|
|
55
|
+
@ReactModule(name = FBGraphRequestModule.NAME)
|
|
56
|
+
public class FBGraphRequestModule extends ReactContextBaseJavaModule {
|
|
57
|
+
public static final String NAME = "FBGraphRequest";
|
|
58
|
+
|
|
59
|
+
private SparseArray<WritableMap> mResponses;
|
|
60
|
+
|
|
61
|
+
private class GraphRequestBatchCallback implements GraphRequestBatch.Callback {
|
|
62
|
+
|
|
63
|
+
private int mBatchID;
|
|
64
|
+
private Callback mCallback;
|
|
65
|
+
|
|
66
|
+
public GraphRequestBatchCallback(int batchID, Callback callback) {
|
|
67
|
+
mBatchID = batchID;
|
|
68
|
+
mCallback = callback;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@Override
|
|
72
|
+
public void onBatchCompleted(GraphRequestBatch batch) {
|
|
73
|
+
WritableMap result = Arguments.createMap();
|
|
74
|
+
result.putString("result", "batch finished executing or timed out");
|
|
75
|
+
mCallback.invoke(null, result, mResponses.get(mBatchID));
|
|
76
|
+
mResponses.remove(mBatchID);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
private class GraphRequestCallback implements GraphRequest.Callback {
|
|
81
|
+
|
|
82
|
+
private String mIndex;
|
|
83
|
+
private int mBatchID;
|
|
84
|
+
|
|
85
|
+
public GraphRequestCallback(int index, int batchID) {
|
|
86
|
+
mIndex = String.valueOf(index);
|
|
87
|
+
mBatchID = batchID;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
@Override
|
|
91
|
+
public void onCompleted(GraphResponse response) {
|
|
92
|
+
WritableArray responseArray = Arguments.createArray();
|
|
93
|
+
responseArray.pushMap(buildFacebookRequestError(response.getError()));
|
|
94
|
+
responseArray.pushMap(buildGraphResponse(response));
|
|
95
|
+
mResponses.get(mBatchID).putArray(mIndex, responseArray);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
public FBGraphRequestModule(ReactApplicationContext reactContext) {
|
|
100
|
+
super(reactContext);
|
|
101
|
+
mResponses = new SparseArray<WritableMap>();
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
@Override
|
|
105
|
+
public String getName() {
|
|
106
|
+
return NAME;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Send the batch of requests.
|
|
111
|
+
* @param requestBatch
|
|
112
|
+
* @param timeout
|
|
113
|
+
* @param batchCallback
|
|
114
|
+
*/
|
|
115
|
+
@ReactMethod
|
|
116
|
+
public void start(ReadableArray requestBatch, int timeout, Callback batchCallback) {
|
|
117
|
+
GraphRequestBatch batch = new GraphRequestBatch();
|
|
118
|
+
int potentialID = 0;
|
|
119
|
+
int batchID = 0;
|
|
120
|
+
synchronized (this) {
|
|
121
|
+
do {
|
|
122
|
+
batchID = potentialID++;
|
|
123
|
+
} while (mResponses.get(batchID) != null);
|
|
124
|
+
mResponses.put(batchID, Arguments.createMap());
|
|
125
|
+
}
|
|
126
|
+
for (int i = 0; i < requestBatch.size(); i++) {
|
|
127
|
+
GraphRequest request = buildRequest(requestBatch.getMap(i));
|
|
128
|
+
request.setCallback(new GraphRequestCallback(i, batchID));
|
|
129
|
+
batch.add(request);
|
|
130
|
+
}
|
|
131
|
+
batch.setTimeout(timeout);
|
|
132
|
+
GraphRequestBatchCallback callback = new GraphRequestBatchCallback(batchID, batchCallback);
|
|
133
|
+
batch.addCallback(callback);
|
|
134
|
+
batch.executeAsync();
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
private GraphRequest buildRequest(ReadableMap requestMap) {
|
|
138
|
+
GraphRequest graphRequest = new GraphRequest();
|
|
139
|
+
graphRequest.setGraphPath(requestMap.getString("graphPath"));
|
|
140
|
+
setConfig(graphRequest, requestMap.getMap("config"));
|
|
141
|
+
return graphRequest;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
private void setConfig(GraphRequest graphRequest, ReadableMap configMap) {
|
|
145
|
+
if (configMap == null) {
|
|
146
|
+
graphRequest.setAccessToken(AccessToken.getCurrentAccessToken());
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
if (configMap.hasKey("parameters")) {
|
|
150
|
+
graphRequest.setParameters(buildParameters(configMap.getMap("parameters")));
|
|
151
|
+
}
|
|
152
|
+
if (configMap.hasKey("httpMethod")) {
|
|
153
|
+
graphRequest.setHttpMethod(HttpMethod.valueOf(configMap.getString("httpMethod")));
|
|
154
|
+
}
|
|
155
|
+
if (configMap.hasKey("version")) {
|
|
156
|
+
graphRequest.setVersion(configMap.getString("version"));
|
|
157
|
+
}
|
|
158
|
+
if (configMap.hasKey("accessToken")) {
|
|
159
|
+
graphRequest.setAccessToken(new AccessToken(
|
|
160
|
+
configMap.getString("accessToken"),
|
|
161
|
+
AccessToken.getCurrentAccessToken().getApplicationId(),
|
|
162
|
+
AccessToken.getCurrentAccessToken().getUserId(),
|
|
163
|
+
null,
|
|
164
|
+
null,
|
|
165
|
+
null,
|
|
166
|
+
null,
|
|
167
|
+
null,
|
|
168
|
+
null,
|
|
169
|
+
null));
|
|
170
|
+
} else {
|
|
171
|
+
graphRequest.setAccessToken(AccessToken.getCurrentAccessToken());
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
private Bundle buildParameters(ReadableMap parameterMap) {
|
|
176
|
+
Bundle parameters = new Bundle();
|
|
177
|
+
ReadableMapKeySetIterator keyIterator = parameterMap.keySetIterator();
|
|
178
|
+
while (keyIterator.hasNextKey()) {
|
|
179
|
+
String key = keyIterator.nextKey();
|
|
180
|
+
ReadableMap parameter = parameterMap.getMap(key);
|
|
181
|
+
if (parameter.hasKey("string")) {
|
|
182
|
+
parameters.putString(key, parameter.getString("string"));
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return parameters;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
private WritableMap buildFacebookRequestError(FacebookRequestError error) {
|
|
189
|
+
if (error == null) {
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
WritableMap errorMap = Arguments.createMap();
|
|
193
|
+
errorMap.putInt("requestStatusCode", error.getRequestStatusCode());
|
|
194
|
+
errorMap.putInt("errorCode", error.getErrorCode());
|
|
195
|
+
errorMap.putInt("subErrorCode", error.getSubErrorCode());
|
|
196
|
+
if (error.getErrorType() != null) {
|
|
197
|
+
errorMap.putString("errorType", error.getErrorType());
|
|
198
|
+
}
|
|
199
|
+
if (error.getErrorMessage() != null) {
|
|
200
|
+
errorMap.putString("errorMessage", error.getErrorMessage());
|
|
201
|
+
}
|
|
202
|
+
if (error.getErrorUserTitle() != null) {
|
|
203
|
+
errorMap.putString("errorUserTitle", error.getErrorUserTitle());
|
|
204
|
+
}
|
|
205
|
+
if (error.getErrorUserMessage() != null) {
|
|
206
|
+
errorMap.putString("errorUserMessage", error.getErrorUserMessage());
|
|
207
|
+
}
|
|
208
|
+
if (error.getRequestResultBody() != null) {
|
|
209
|
+
errorMap.putString("requestResultBody", error.getRequestResultBody().toString());
|
|
210
|
+
}
|
|
211
|
+
if (error.getRequestResult() != null) {
|
|
212
|
+
errorMap.putString("requestResult", error.getRequestResult().toString());
|
|
213
|
+
}
|
|
214
|
+
if (error.getBatchRequestResult() != null) {
|
|
215
|
+
errorMap.putString("batchRequestResult", error.getBatchRequestResult().toString());
|
|
216
|
+
}
|
|
217
|
+
if (error.getException() != null) {
|
|
218
|
+
errorMap.putString("exception", error.getException().toString());
|
|
219
|
+
}
|
|
220
|
+
return errorMap;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
private WritableMap buildGraphResponse(GraphResponse response) {
|
|
224
|
+
if (response.getJSONObject() != null) {
|
|
225
|
+
return convertJSONObject(response.getJSONObject());
|
|
226
|
+
}
|
|
227
|
+
return Arguments.createMap();
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
private WritableArray convertJSONArray(JSONArray jsonArray) {
|
|
231
|
+
WritableArray result = Arguments.createArray();
|
|
232
|
+
for (int i = 0; i < jsonArray.length(); i++) {
|
|
233
|
+
Object object;
|
|
234
|
+
try {
|
|
235
|
+
object = jsonArray.get(i);
|
|
236
|
+
} catch (JSONException e) {
|
|
237
|
+
return result;
|
|
238
|
+
}
|
|
239
|
+
if (object instanceof JSONObject) {
|
|
240
|
+
result.pushMap(convertJSONObject((JSONObject) object));
|
|
241
|
+
} else if (object instanceof JSONArray) {
|
|
242
|
+
result.pushArray(convertJSONArray((JSONArray) object));
|
|
243
|
+
} else if (object instanceof String) {
|
|
244
|
+
result.pushString((String) object);
|
|
245
|
+
} else if (object instanceof Integer) {
|
|
246
|
+
result.pushInt((int) object);
|
|
247
|
+
} else if (object instanceof Boolean) {
|
|
248
|
+
result.pushBoolean((Boolean) object);
|
|
249
|
+
} else if (object instanceof Double) {
|
|
250
|
+
result.pushDouble((Double) object);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return result;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
private WritableMap convertJSONObject(JSONObject object) {
|
|
257
|
+
WritableMap result = Arguments.createMap();
|
|
258
|
+
Iterator<String> keyIterator = object.keys();
|
|
259
|
+
while (keyIterator.hasNext()) {
|
|
260
|
+
String key = keyIterator.next();
|
|
261
|
+
Object value;
|
|
262
|
+
try {
|
|
263
|
+
value = object.get(key);
|
|
264
|
+
} catch (JSONException e) {
|
|
265
|
+
return result;
|
|
266
|
+
}
|
|
267
|
+
if (value instanceof JSONObject) {
|
|
268
|
+
result.putMap(key, convertJSONObject((JSONObject) value));
|
|
269
|
+
} else if (value instanceof JSONArray) {
|
|
270
|
+
result.putArray(key, convertJSONArray((JSONArray) value));
|
|
271
|
+
} else if (value instanceof String) {
|
|
272
|
+
result.putString(key, (String) value);
|
|
273
|
+
} else if (value instanceof Integer) {
|
|
274
|
+
result.putInt(key, (int) value);
|
|
275
|
+
} else if (value instanceof Boolean) {
|
|
276
|
+
result.putBoolean(key, (Boolean) value);
|
|
277
|
+
} else if (value instanceof Double) {
|
|
278
|
+
result.putDouble(key, (Double) value);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return result;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
|
|
5
|
+
* copy, modify, and distribute this software in source code or binary form for use
|
|
6
|
+
* in connection with the web services and APIs provided by Facebook.
|
|
7
|
+
*
|
|
8
|
+
* As with any software that integrates with the Facebook platform, your use of
|
|
9
|
+
* this software is subject to the Facebook Developer Principles and Policies
|
|
10
|
+
* [http://developers.facebook.com/policy/]. This copyright notice shall be
|
|
11
|
+
* included in all copies or substantial portions of the software.
|
|
12
|
+
*
|
|
13
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
15
|
+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
16
|
+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
17
|
+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
18
|
+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
package com.facebook.reactnative.androidsdk;
|
|
22
|
+
|
|
23
|
+
import androidx.annotation.Nullable;
|
|
24
|
+
|
|
25
|
+
import com.facebook.login.DefaultAudience;
|
|
26
|
+
import com.facebook.login.LoginBehavior;
|
|
27
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
28
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
29
|
+
import com.facebook.react.uimanager.annotations.ReactProp;
|
|
30
|
+
import com.facebook.react.uimanager.SimpleViewManager;
|
|
31
|
+
import com.facebook.react.uimanager.ThemedReactContext;
|
|
32
|
+
|
|
33
|
+
import java.util.Locale;
|
|
34
|
+
|
|
35
|
+
public class FBLoginButtonManager extends SimpleViewManager<RCTLoginButton> {
|
|
36
|
+
|
|
37
|
+
public static final String REACT_CLASS = "RCTFBLoginButton";
|
|
38
|
+
|
|
39
|
+
private final FBActivityEventListener mActivityEventListener = new FBActivityEventListener();
|
|
40
|
+
|
|
41
|
+
public FBLoginButtonManager(ReactApplicationContext reactApplicationContext) {
|
|
42
|
+
reactApplicationContext.addActivityEventListener(mActivityEventListener);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
@Override
|
|
46
|
+
public String getName() {
|
|
47
|
+
return REACT_CLASS;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@Override
|
|
51
|
+
public RCTLoginButton createViewInstance(ThemedReactContext context) {
|
|
52
|
+
return new RCTLoginButton(context, mActivityEventListener.getCallbackManager());
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@ReactProp(name = "loginBehaviorAndroid")
|
|
56
|
+
public void setLoginBehavior(RCTLoginButton loginButton, @Nullable String loginBehavior) {
|
|
57
|
+
LoginBehavior behavior = LoginBehavior.NATIVE_WITH_FALLBACK;
|
|
58
|
+
|
|
59
|
+
if (loginBehavior != null) {
|
|
60
|
+
behavior = LoginBehavior.valueOf(loginBehavior.toUpperCase(Locale.ROOT));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
loginButton.setLoginBehavior(behavior);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@ReactProp(name = "defaultAudience")
|
|
67
|
+
public void setDefaultAudience(RCTLoginButton loginButton, @Nullable String defaultAudience) {
|
|
68
|
+
DefaultAudience audience = DefaultAudience.FRIENDS;
|
|
69
|
+
|
|
70
|
+
if (defaultAudience != null) {
|
|
71
|
+
audience = DefaultAudience.valueOf(defaultAudience.toUpperCase(Locale.ROOT));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
loginButton.setDefaultAudience(audience);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
@ReactProp(name = "permissions")
|
|
78
|
+
public void setPermissions(
|
|
79
|
+
RCTLoginButton loginButton,
|
|
80
|
+
@Nullable ReadableArray publishPermissions) {
|
|
81
|
+
loginButton.setPermissions(Utility.reactArrayToStringList(publishPermissions));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
|
|
5
|
+
* copy, modify, and distribute this software in source code or binary form for use
|
|
6
|
+
* in connection with the web services and APIs provided by Facebook.
|
|
7
|
+
*
|
|
8
|
+
* As with any software that integrates with the Facebook platform, your use of
|
|
9
|
+
* this software is subject to the Facebook Developer Principles and Policies
|
|
10
|
+
* [http://developers.facebook.com/policy/]. This copyright notice shall be
|
|
11
|
+
* included in all copies or substantial portions of the software.
|
|
12
|
+
*
|
|
13
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
15
|
+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
16
|
+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
17
|
+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
18
|
+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
package com.facebook.reactnative.androidsdk;
|
|
22
|
+
|
|
23
|
+
import android.app.Activity;
|
|
24
|
+
|
|
25
|
+
import com.facebook.AccessToken;
|
|
26
|
+
import com.facebook.login.DefaultAudience;
|
|
27
|
+
import com.facebook.login.LoginBehavior;
|
|
28
|
+
import com.facebook.login.LoginManager;
|
|
29
|
+
import com.facebook.login.LoginResult;
|
|
30
|
+
import com.facebook.react.bridge.Arguments;
|
|
31
|
+
import com.facebook.react.bridge.NativeModule;
|
|
32
|
+
import com.facebook.react.bridge.Promise;
|
|
33
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
34
|
+
import com.facebook.react.bridge.ReactMethod;
|
|
35
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
36
|
+
import com.facebook.react.bridge.WritableArray;
|
|
37
|
+
import com.facebook.react.bridge.WritableMap;
|
|
38
|
+
import com.facebook.react.module.annotations.ReactModule;
|
|
39
|
+
|
|
40
|
+
import java.util.Locale;
|
|
41
|
+
import java.util.Set;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* This is a {@link NativeModule} that allows JS to use LoginManager of Facebook Android SDK.
|
|
45
|
+
*/
|
|
46
|
+
@ReactModule(name = FBLoginManagerModule.NAME)
|
|
47
|
+
public class FBLoginManagerModule extends FBSDKCallbackManagerBaseJavaModule {
|
|
48
|
+
|
|
49
|
+
public static final String NAME = "FBLoginManager";
|
|
50
|
+
|
|
51
|
+
private class LoginManagerCallback extends ReactNativeFacebookSDKCallback<LoginResult> {
|
|
52
|
+
|
|
53
|
+
public LoginManagerCallback(Promise promise) {
|
|
54
|
+
super(promise);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@Override
|
|
58
|
+
public void onSuccess(LoginResult loginResult) {
|
|
59
|
+
if (mPromise != null) {
|
|
60
|
+
AccessToken accessToken = loginResult.getAccessToken();
|
|
61
|
+
AccessToken.setCurrentAccessToken(accessToken);
|
|
62
|
+
WritableMap result = Arguments.createMap();
|
|
63
|
+
result.putBoolean("isCancelled", false);
|
|
64
|
+
result.putArray("grantedPermissions",
|
|
65
|
+
setToWritableArray(loginResult.getRecentlyGrantedPermissions()));
|
|
66
|
+
result.putArray("declinedPermissions",
|
|
67
|
+
setToWritableArray(loginResult.getRecentlyDeniedPermissions()));
|
|
68
|
+
mPromise.resolve(result);
|
|
69
|
+
mPromise = null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
public FBLoginManagerModule(ReactApplicationContext reactContext, FBActivityEventListener activityEventListener) {
|
|
75
|
+
super(reactContext, activityEventListener);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
@Override
|
|
79
|
+
public String getName() {
|
|
80
|
+
return NAME;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Get {@link LoginBehavior} for login attempts.
|
|
85
|
+
* @param promise Use Promise to pass login behavior back to JS.
|
|
86
|
+
*/
|
|
87
|
+
@ReactMethod
|
|
88
|
+
public void getLoginBehavior(Promise promise) {
|
|
89
|
+
promise.resolve(LoginManager.getInstance().getLoginBehavior().name().toLowerCase(Locale.ROOT));
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Set {@link LoginBehavior} for login attempts.
|
|
94
|
+
* @param loginBehaviorString must be one of the constants in Enum
|
|
95
|
+
* {@link LoginBehavior}.
|
|
96
|
+
* @throws {@link java.lang.IllegalArgumentException} if the argument is not a valid constant.
|
|
97
|
+
*/
|
|
98
|
+
@ReactMethod
|
|
99
|
+
public void setLoginBehavior(String loginBehaviorString) {
|
|
100
|
+
LoginBehavior loginBehavior = LoginBehavior.valueOf(loginBehaviorString.toUpperCase(Locale.ROOT));
|
|
101
|
+
LoginManager.getInstance().setLoginBehavior(loginBehavior);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Get {@link DefaultAudience} to use for sessions that post data to Facebook.
|
|
106
|
+
* @param promise Use promise to pass default audience back to JS.
|
|
107
|
+
*/
|
|
108
|
+
@ReactMethod
|
|
109
|
+
public void getDefaultAudience(Promise promise) {
|
|
110
|
+
promise.resolve(LoginManager.getInstance().getDefaultAudience().name().toLowerCase(Locale.ROOT));
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Set {@link DefaultAudience} to use for sessions that post data to Facebook.
|
|
115
|
+
* @param defaultAudienceString must be one of the constants in Enum {@link DefaultAudience}.
|
|
116
|
+
* @throws {@link java.lang.IllegalArgumentException} if the argument is not a valid constant.
|
|
117
|
+
*/
|
|
118
|
+
@ReactMethod
|
|
119
|
+
public void setDefaultAudience(String defaultAudienceString) {
|
|
120
|
+
DefaultAudience defaultAudience = DefaultAudience.valueOf(defaultAudienceString.toUpperCase(Locale.ROOT));
|
|
121
|
+
LoginManager.getInstance().setDefaultAudience(defaultAudience);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Log out from Facebook.
|
|
126
|
+
*/
|
|
127
|
+
@ReactMethod
|
|
128
|
+
public void logOut() {
|
|
129
|
+
LoginManager.getInstance().logOut();
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Attempts a Facebook login with the specified permissions.
|
|
134
|
+
* @param permissions must be one of the provided permissions. See
|
|
135
|
+
* <a href="https://developers.facebook.com/docs/facebook-login/permissions">
|
|
136
|
+
* Facebook login permissions</a>.
|
|
137
|
+
* @param promise Use promise to pass login result to JS after login finish.
|
|
138
|
+
*/
|
|
139
|
+
@ReactMethod
|
|
140
|
+
public void logInWithPermissions(ReadableArray permissions, final Promise promise) {
|
|
141
|
+
final LoginManager loginManager = LoginManager.getInstance();
|
|
142
|
+
loginManager.registerCallback(getCallbackManager(), new LoginManagerCallback(promise));
|
|
143
|
+
Activity activity = getCurrentActivity();
|
|
144
|
+
if (activity != null) {
|
|
145
|
+
loginManager.logIn(activity,
|
|
146
|
+
Utility.reactArrayToStringList(permissions));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Attempts a re-authorization to regain data access.
|
|
152
|
+
* @param promise Use promise to pass re-authorization result to JS after re-authorization finish.
|
|
153
|
+
*/
|
|
154
|
+
@ReactMethod
|
|
155
|
+
public void reauthorizeDataAccess(final Promise promise) {
|
|
156
|
+
final LoginManager loginManager = LoginManager.getInstance();
|
|
157
|
+
loginManager.registerCallback(getCallbackManager(), new LoginManagerCallback(promise));
|
|
158
|
+
Activity activity = getCurrentActivity();
|
|
159
|
+
if (activity != null) {
|
|
160
|
+
loginManager.reauthorizeDataAccess(activity);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
private WritableArray setToWritableArray(Set<String> set) {
|
|
165
|
+
WritableArray array = Arguments.createArray();
|
|
166
|
+
for (String e: set) {
|
|
167
|
+
array.pushString(e);
|
|
168
|
+
}
|
|
169
|
+
return array;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
|
|
5
|
+
* copy, modify, and distribute this software in source code or binary form for use
|
|
6
|
+
* in connection with the web services and APIs provided by Facebook.
|
|
7
|
+
*
|
|
8
|
+
* As with any software that integrates with the Facebook platform, your use of
|
|
9
|
+
* this software is subject to the Facebook Developer Principles and Policies
|
|
10
|
+
* [http://developers.facebook.com/policy/]. This copyright notice shall be
|
|
11
|
+
* included in all copies or substantial portions of the software.
|
|
12
|
+
*
|
|
13
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
15
|
+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
16
|
+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
17
|
+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
18
|
+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
package com.facebook.reactnative.androidsdk;
|
|
22
|
+
|
|
23
|
+
import com.facebook.react.bridge.Arguments;
|
|
24
|
+
import com.facebook.react.bridge.Promise;
|
|
25
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
26
|
+
import com.facebook.react.bridge.ReactMethod;
|
|
27
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
28
|
+
import com.facebook.react.bridge.WritableMap;
|
|
29
|
+
import com.facebook.react.module.annotations.ReactModule;
|
|
30
|
+
import com.facebook.share.model.ShareContent;
|
|
31
|
+
import com.facebook.share.widget.MessageDialog;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Provides functionality to send content via the Facebook Message Dialog
|
|
35
|
+
*/
|
|
36
|
+
@ReactModule(name = FBMessageDialogModule.NAME)
|
|
37
|
+
public class FBMessageDialogModule extends FBSDKCallbackManagerBaseJavaModule {
|
|
38
|
+
public static final String NAME = "FBMessageDialog";
|
|
39
|
+
|
|
40
|
+
private class MessageDialogCallback extends ReactNativeFacebookSDKCallback<MessageDialog.Result> {
|
|
41
|
+
|
|
42
|
+
public MessageDialogCallback(Promise promise) {
|
|
43
|
+
super(promise);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@Override
|
|
47
|
+
public void onSuccess(MessageDialog.Result result) {
|
|
48
|
+
if (mPromise != null) {
|
|
49
|
+
WritableMap messageDialogResult = Arguments.createMap();
|
|
50
|
+
messageDialogResult.putString("postId", result.getPostId());
|
|
51
|
+
mPromise.resolve(messageDialogResult);
|
|
52
|
+
mPromise = null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
private boolean mShouldFailOnDataError;
|
|
58
|
+
|
|
59
|
+
public FBMessageDialogModule(ReactApplicationContext reactContext, FBActivityEventListener activityEventListener) {
|
|
60
|
+
super(reactContext, activityEventListener);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
@Override
|
|
64
|
+
public String getName() {
|
|
65
|
+
return NAME;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Indicates whether it is possible to show the dialog for ShareContent of the specified type.
|
|
70
|
+
* @param shareContentMap must be a valid {@link ShareContent}.
|
|
71
|
+
* @param promise Use promise to pass message dialog result to JS.
|
|
72
|
+
*/
|
|
73
|
+
@ReactMethod
|
|
74
|
+
public void canShow(ReadableMap shareContentMap, Promise promise) {
|
|
75
|
+
if (getCurrentActivity() != null) {
|
|
76
|
+
ShareContent shareContent = Utility.buildShareContent(shareContentMap);
|
|
77
|
+
MessageDialog messageDialog = new MessageDialog(getCurrentActivity());
|
|
78
|
+
promise.resolve(messageDialog.canShow(shareContent));
|
|
79
|
+
} else {
|
|
80
|
+
promise.reject("No current activity.");
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Show the provided ShareContent using the provided Activity.
|
|
86
|
+
* @param shareContentMap must be a valid {@link ShareContent}.
|
|
87
|
+
* @param promise Use promise to pass message dialog result to JS.
|
|
88
|
+
*/
|
|
89
|
+
@ReactMethod
|
|
90
|
+
public void show(ReadableMap shareContentMap, Promise promise) {
|
|
91
|
+
if (getCurrentActivity() != null) {
|
|
92
|
+
ShareContent shareContent = Utility.buildShareContent(shareContentMap);
|
|
93
|
+
MessageDialog messageDialog = new MessageDialog(getCurrentActivity());
|
|
94
|
+
messageDialog.setShouldFailOnDataError(mShouldFailOnDataError);
|
|
95
|
+
messageDialog.registerCallback(getCallbackManager(), new MessageDialogCallback(promise));
|
|
96
|
+
messageDialog.show(shareContent);
|
|
97
|
+
} else {
|
|
98
|
+
promise.reject("No current activity.");
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Specifies whether the sharer should fail if it finds an error with the share content.
|
|
104
|
+
* If false, the share dialog will still be displayed without the data that was mis-configured.
|
|
105
|
+
* @param shouldFailOnDataError Whether the dialog should fail if it finds an error.
|
|
106
|
+
*/
|
|
107
|
+
@ReactMethod
|
|
108
|
+
public void setShouldFailOnDataError(boolean shouldFailOnDataError) {
|
|
109
|
+
mShouldFailOnDataError = shouldFailOnDataError;
|
|
110
|
+
}
|
|
111
|
+
}
|