├── README.md ├── lib └── Android │ ├── bolts-tasks-1.4.0.jar │ ├── bolts-android-1.1.2.jar │ ├── bolts-android-1.4.0.jar │ ├── bolts-applinks-1.4.0.jar │ └── res │ └── values │ ├── FacebookAppID.xml │ └── values.xml ├── ThirdParty └── repository │ └── com │ └── facebook │ └── Facebook │ ├── 4.10.1 │ ├── Facebook-4.10.1.aar │ └── Facebook-4.10.1.pom │ ├── 4.16.1 │ ├── Facebook-4.16.1.aar │ └── Facebook-4.16.1.pom │ └── 4.18.0 │ ├── Facebook-4.18.0.aar │ └── Facebook-4.18.0.pom ├── Source └── FacebookSDK │ ├── Private │ ├── FacebookSDKSettings.cpp │ ├── FacebookSDKPrivatePCH.h │ ├── FacebookSDK.cpp │ ├── FacebookSDKComponent.cpp │ └── FacebookSDKFunctions.cpp │ ├── Classes │ ├── FacebookSDKSettings.h │ ├── FacebookSDKFunctions.h │ └── FacebookSDKComponent.h │ ├── Public │ └── IFacebookSDK.h │ ├── FacebookSDK.Build.cs │ └── FacebookSDK_APL.xml ├── .gitattributes ├── FacebookSDK.uplugin ├── .gitignore └── LICENSE /README.md: -------------------------------------------------------------------------------- 1 | # Facebook 2 | A plugin for Unreal Engine 4 that integrates the Facebook SDK. 3 | -------------------------------------------------------------------------------- /lib/Android/bolts-tasks-1.4.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PandoraEntertainment/Facebook/HEAD/lib/Android/bolts-tasks-1.4.0.jar -------------------------------------------------------------------------------- /lib/Android/bolts-android-1.1.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PandoraEntertainment/Facebook/HEAD/lib/Android/bolts-android-1.1.2.jar -------------------------------------------------------------------------------- /lib/Android/bolts-android-1.4.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PandoraEntertainment/Facebook/HEAD/lib/Android/bolts-android-1.4.0.jar -------------------------------------------------------------------------------- /lib/Android/bolts-applinks-1.4.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PandoraEntertainment/Facebook/HEAD/lib/Android/bolts-applinks-1.4.0.jar -------------------------------------------------------------------------------- /ThirdParty/repository/com/facebook/Facebook/4.10.1/Facebook-4.10.1.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PandoraEntertainment/Facebook/HEAD/ThirdParty/repository/com/facebook/Facebook/4.10.1/Facebook-4.10.1.aar -------------------------------------------------------------------------------- /ThirdParty/repository/com/facebook/Facebook/4.16.1/Facebook-4.16.1.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PandoraEntertainment/Facebook/HEAD/ThirdParty/repository/com/facebook/Facebook/4.16.1/Facebook-4.16.1.aar -------------------------------------------------------------------------------- /ThirdParty/repository/com/facebook/Facebook/4.18.0/Facebook-4.18.0.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PandoraEntertainment/Facebook/HEAD/ThirdParty/repository/com/facebook/Facebook/4.18.0/Facebook-4.18.0.aar -------------------------------------------------------------------------------- /lib/Android/res/values/FacebookAppID.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 228149914278307 4 | -------------------------------------------------------------------------------- /Source/FacebookSDK/Private/FacebookSDKSettings.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include "FacebookSDKPrivatePCH.h" 3 | #include "FacebookSDKSettings.h" 4 | 5 | UFacebookSDKSettings::UFacebookSDKSettings(const FObjectInitializer& ObjectInitializer) 6 | : Super(ObjectInitializer) 7 | { 8 | } 9 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /ThirdParty/repository/com/facebook/Facebook/4.18.0/Facebook-4.18.0.pom: -------------------------------------------------------------------------------- 1 | 2 | 4.0.0 3 | com.facebook 4 | Facebook 5 | 4.18.0 6 | aar 7 | 8 | -------------------------------------------------------------------------------- /Source/FacebookSDK/Classes/FacebookSDKSettings.h: -------------------------------------------------------------------------------- 1 | 2 | #pragma once 3 | 4 | #include "FacebookSDKSettings.generated.h" 5 | 6 | UCLASS(config = Engine, defaultconfig) 7 | class UFacebookSDKSettings : public UObject 8 | { 9 | GENERATED_BODY() 10 | 11 | public: 12 | UFacebookSDKSettings(const FObjectInitializer& ObjectInitializer); 13 | 14 | // SDK Ids 15 | 16 | UPROPERTY(Config, EditAnywhere, Category = Parse, meta = (DisplayName = "App ID")) 17 | FString FBID; 18 | 19 | 20 | }; 21 | -------------------------------------------------------------------------------- /Source/FacebookSDK/Private/FacebookSDKPrivatePCH.h: -------------------------------------------------------------------------------- 1 | 2 | #pragma once 3 | 4 | #include "CoreUObject.h" 5 | #include "Engine.h" 6 | 7 | #if PLATFORM_IOS 8 | 9 | #endif 10 | 11 | #include "IFacebookSDK.h" 12 | 13 | #include "FacebookSDKClasses.h" 14 | 15 | // You should place include statements to your module's private header files here. You only need to 16 | // add includes for headers that are used in most of your module's source files though. 17 | 18 | DECLARE_LOG_CATEGORY_EXTERN(LogFacebookSDK, Log, All); 19 | -------------------------------------------------------------------------------- /FacebookSDK.uplugin: -------------------------------------------------------------------------------- 1 | { 2 | "FileVersion": 1, 3 | "Version": 1, 4 | "VersionName": "1.0", 5 | "FriendlyName": "FacebookSDK", 6 | "Description": "This plugin enables Login, App Invite, and Sharing Photo, functionality for Facebook Platform.", 7 | "Category": "Advertising", 8 | "CreatedBy": "Pandora Entertainment Ltd.", 9 | "CreatedByURL": "www.pandoraentertainment.co.uk", 10 | "DocsURL": "", 11 | "MarketplaceURL": "", 12 | "Modules": [ 13 | { 14 | "Name": "FacebookSDK", 15 | "Type": "Runtime", 16 | "LoadingPhase": "Default" 17 | } 18 | ], 19 | "EnabledByDefault": false, 20 | "CanContainContent": false, 21 | "IsBetaVersion": false, 22 | "Installed": false 23 | } -------------------------------------------------------------------------------- /ThirdParty/repository/com/facebook/Facebook/4.10.1/Facebook-4.10.1.pom: -------------------------------------------------------------------------------- 1 | 2 | 4.0.0 3 | com.facebook 4 | Facebook 5 | 4.10.1 6 | aar 7 | 8 | 9 | com.android.support 10 | cardview-v7 11 | 23.0.0 12 | compile 13 | aar 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Windows image file caches 2 | Thumbs.db 3 | ehthumbs.db 4 | 5 | # Folder config file 6 | Desktop.ini 7 | 8 | # Recycle Bin used on file shares 9 | $RECYCLE.BIN/ 10 | 11 | # Windows Installer files 12 | *.cab 13 | *.msi 14 | *.msm 15 | *.msp 16 | 17 | # Windows shortcuts 18 | *.lnk 19 | 20 | # ========================= 21 | # Operating System Files 22 | # ========================= 23 | 24 | # OSX 25 | # ========================= 26 | 27 | .DS_Store 28 | .AppleDouble 29 | .LSOverride 30 | 31 | # Thumbnails 32 | ._* 33 | 34 | # Files that might appear in the root of a volume 35 | .DocumentRevisions-V100 36 | .fseventsd 37 | .Spotlight-V100 38 | .TemporaryItems 39 | .Trashes 40 | .VolumeIcon.icns 41 | 42 | # Directories potentially created on remote AFP share 43 | .AppleDB 44 | .AppleDesktop 45 | Network Trash Folder 46 | Temporary Items 47 | .apdisk 48 | -------------------------------------------------------------------------------- /ThirdParty/repository/com/facebook/Facebook/4.16.1/Facebook-4.16.1.pom: -------------------------------------------------------------------------------- 1 | 2 | 4.0.0 3 | com.facebook 4 | Facebook 5 | 4.16.1 6 | aar 7 | 8 | 9 | com.android.support 10 | support-vector-drawable 11 | 24.1.1 12 | compile 13 | aar 14 | 15 | 16 | 17 | 18 | com.android.support 19 | appcompat-v7 20 | 24.1.1 21 | compile 22 | aar 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Source/FacebookSDK/Public/IFacebookSDK.h: -------------------------------------------------------------------------------- 1 | 2 | #pragma once 3 | 4 | #include "ModuleManager.h" 5 | 6 | 7 | /** 8 | * The public interface to this module. In most cases, this interface is only public to sibling modules 9 | * within this plugin. 10 | */ 11 | class IFacebookSDK : public IModuleInterface 12 | { 13 | 14 | public: 15 | 16 | /** 17 | * Singleton-like access to this module's interface. This is just for convenience! 18 | * Beware of calling this during the shutdown phase, though. Your module might have been unloaded already. 19 | * 20 | * @return Returns singleton instance, loading the module on demand if needed 21 | */ 22 | static inline IFacebookSDK& Get() 23 | { 24 | return FModuleManager::LoadModuleChecked< IFacebookSDK >( "FacebookSDK" ); 25 | } 26 | 27 | /** 28 | * Checks to see if this module is loaded and ready. It is only valid to call Get() if IsAvailable() returns true. 29 | * 30 | * @return True if the module is loaded and ready to use 31 | */ 32 | static inline bool IsAvailable() 33 | { 34 | return FModuleManager::Get().IsModuleLoaded( "FacebookSDK" ); 35 | } 36 | }; 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Pandora Entertainment 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Source/FacebookSDK/Classes/FacebookSDKFunctions.h: -------------------------------------------------------------------------------- 1 | 2 | #pragma once 3 | 4 | #include "FacebookSDKFunctions.generated.h" 5 | 6 | 7 | 8 | UCLASS(NotBlueprintable) 9 | class UFacebookSDKFunctions : public UObject { 10 | GENERATED_BODY() 11 | 12 | public: 13 | 14 | #if PLATFORM_ANDROID 15 | static void InitJavaFunctions(); 16 | #endif 17 | 18 | UFUNCTION(BlueprintCallable, meta = (Keywords = "FacebookSDK "), Category = "FacebookSDK|") 19 | static void FacebookSDK_Login(); 20 | 21 | UFUNCTION(BlueprintCallable, meta = (Keywords = "FacebookSDK "), Category = "FacebookSDK|") 22 | static void FacebookSDK_Logout(); 23 | 24 | UFUNCTION(BlueprintCallable, meta = (Keywords = "FacebookSDK "), Category = "FacebookSDK|") 25 | static void FacebookSDK_AppInvite(); 26 | 27 | UFUNCTION(BlueprintCallable, meta = (Keywords = "FacebookSDK "), Category = "FacebookSDK|") 28 | static void FacebookSDK_SharePhoto(FString AppName, FString Filename); 29 | 30 | UFUNCTION(BlueprintCallable, meta = (Keywords = "FacebookSDK "), Category = "FacebookSDK|") 31 | static FString FacebookGetAccessToken(); 32 | 33 | UFUNCTION(BlueprintPure, meta = (Keywords = "FacebookSDK "), Category = "FacebookSDK|") 34 | static bool FacebookIsLoggedIn(); 35 | 36 | 37 | }; 38 | -------------------------------------------------------------------------------- /Source/FacebookSDK/Private/FacebookSDK.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include "FacebookSDKPrivatePCH.h" 3 | #include "FacebookSDKSettings.h" 4 | #include "ISettingsModule.h" 5 | 6 | DEFINE_LOG_CATEGORY(LogFacebookSDK); 7 | 8 | #define LOCTEXT_NAMESPACE "FacebookSDK" 9 | 10 | class FFacebookSDK : public IFacebookSDK 11 | { 12 | virtual void StartupModule() override; 13 | virtual void ShutdownModule() override; 14 | }; 15 | 16 | IMPLEMENT_MODULE( FFacebookSDK, FacebookSDK ) 17 | 18 | void FFacebookSDK::StartupModule() 19 | { 20 | // register settings 21 | if (ISettingsModule* SettingsModule = FModuleManager::GetModulePtr("Settings")) 22 | { 23 | SettingsModule->RegisterSettings("Project", "Plugins", "FacebookSDK", 24 | LOCTEXT("RuntimeSettingsName", "FacebookSDK"), 25 | LOCTEXT("RuntimeSettingsDescription", "Configure the FacebookSDK plugin"), 26 | GetMutableDefault() 27 | ); 28 | } 29 | 30 | #if PLATFORM_ANDROID 31 | UFacebookSDKFunctions::InitJavaFunctions(); 32 | #endif 33 | } 34 | 35 | 36 | void FFacebookSDK::ShutdownModule() 37 | { 38 | // This function may be called during shutdown to clean up your module. For modules that support dynamic reloading, 39 | // we call this function before unloading the module. 40 | } 41 | 42 | #undef LOCTEXT_NAMESPACE 43 | -------------------------------------------------------------------------------- /Source/FacebookSDK/Private/FacebookSDKComponent.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include "FacebookSDKPrivatePCH.h" 3 | 4 | void UFacebookSDKComponent::OnRegister() 5 | { 6 | Super::OnRegister(); 7 | 8 | 9 | UFacebookSDKComponent::onFacebookLoginCompletedDelegate.AddUObject(this, &UFacebookSDKComponent::onFacebookLoginCompleted_Handler); 10 | 11 | UFacebookSDKComponent::onFacebookLoginCancelledDelegate.AddUObject(this, &UFacebookSDKComponent::onFacebookLoginCancelled_Handler); 12 | 13 | UFacebookSDKComponent::onFacebookLoginErrorDelegate.AddUObject(this, &UFacebookSDKComponent::onFacebookLoginError_Handler); 14 | 15 | } 16 | 17 | void UFacebookSDKComponent::OnUnregister() 18 | { 19 | Super::OnUnregister(); 20 | 21 | 22 | UFacebookSDKComponent::onFacebookLoginCompletedDelegate.RemoveAll(this); 23 | 24 | UFacebookSDKComponent::onFacebookLoginCancelledDelegate.RemoveAll(this); 25 | 26 | UFacebookSDKComponent::onFacebookLoginErrorDelegate.RemoveAll(this); 27 | } 28 | 29 | UFacebookSDKComponent::FFacebookSDKonFacebookLoginCompletedDelegate UFacebookSDKComponent::onFacebookLoginCompletedDelegate; 30 | 31 | UFacebookSDKComponent::FFacebookSDKonFacebookLoginCancelledDelegate UFacebookSDKComponent::onFacebookLoginCancelledDelegate; 32 | 33 | UFacebookSDKComponent::FFacebookSDKonFacebookLoginErrorDelegate UFacebookSDKComponent::onFacebookLoginErrorDelegate; 34 | -------------------------------------------------------------------------------- /Source/FacebookSDK/FacebookSDK.Build.cs: -------------------------------------------------------------------------------- 1 | 2 | 3 | using System.IO; 4 | 5 | namespace UnrealBuildTool.Rules 6 | { 7 | public class FacebookSDK : ModuleRules 8 | { 9 | public FacebookSDK(TargetInfo Target) 10 | { 11 | PublicIncludePaths.AddRange( 12 | new string[] { 13 | // ... add public include paths required here ... 14 | } 15 | ); 16 | 17 | PrivateIncludePaths.AddRange( 18 | new string[] { 19 | "Developer/FacebookSDK/Private", 20 | // ... add other private include paths required here ... 21 | } 22 | ); 23 | 24 | PublicDependencyModuleNames.AddRange( 25 | new string[] 26 | { 27 | "Core", 28 | "CoreUObject", 29 | "Engine" 30 | // ... add other public dependencies that you statically link with here ... 31 | } 32 | ); 33 | 34 | PrivateDependencyModuleNames.AddRange( 35 | new string[] 36 | { 37 | // ... add private dependencies that you statically link with here ... 38 | } 39 | ); 40 | 41 | DynamicallyLoadedModuleNames.AddRange( 42 | new string[] 43 | { 44 | // ... add any modules that your module loads dynamically here ... 45 | } 46 | ); 47 | 48 | PrivateIncludePathModuleNames.AddRange( 49 | new string[] { 50 | "Settings", 51 | "Launch", 52 | } 53 | ); 54 | 55 | 56 | if (Target.Platform == UnrealTargetPlatform.IOS) { 57 | } 58 | else if(Target.Platform == UnrealTargetPlatform.Android) 59 | { 60 | string PluginPath = Utils.MakePathRelativeTo(ModuleDirectory, BuildConfiguration.RelativeEnginePath); 61 | AdditionalPropertiesForReceipt.Add(new ReceiptProperty("AndroidPlugin", Path.Combine(PluginPath, "FacebookSDK_APL.xml"))); 62 | } 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /Source/FacebookSDK/Classes/FacebookSDKComponent.h: -------------------------------------------------------------------------------- 1 | 2 | #pragma once 3 | 4 | #include "FacebookSDKFunctions.h" 5 | #include "FacebookSDKComponent.generated.h" 6 | 7 | UCLASS(ClassGroup=Advertising, HideCategories=(Activation, "Components|Activation", Collision), meta=(BlueprintSpawnableComponent)) 8 | class UFacebookSDKComponent : public UActorComponent 9 | { 10 | GENERATED_BODY() 11 | 12 | public: 13 | 14 | 15 | DECLARE_MULTICAST_DELEGATE(FFacebookSDKonFacebookLoginCompletedDelegate); 16 | 17 | static FFacebookSDKonFacebookLoginCompletedDelegate onFacebookLoginCompletedDelegate; 18 | 19 | DECLARE_DYNAMIC_MULTICAST_DELEGATE(FFacebookSDKonFacebookLoginCompletedDelegateDynDelegate); 20 | 21 | UPROPERTY(BlueprintAssignable) 22 | FFacebookSDKonFacebookLoginCompletedDelegateDynDelegate onFacebookLoginCompleted; 23 | 24 | 25 | DECLARE_MULTICAST_DELEGATE(FFacebookSDKonFacebookLoginCancelledDelegate); 26 | 27 | static FFacebookSDKonFacebookLoginCancelledDelegate onFacebookLoginCancelledDelegate; 28 | 29 | DECLARE_DYNAMIC_MULTICAST_DELEGATE(FFacebookSDKonFacebookLoginCancelledDynDelegate); 30 | 31 | UPROPERTY(BlueprintAssignable) 32 | FFacebookSDKonFacebookLoginCancelledDynDelegate onFacebookLoginCancelled; 33 | 34 | 35 | DECLARE_MULTICAST_DELEGATE_OneParam(FFacebookSDKonFacebookLoginErrorDelegate, FString); 36 | 37 | static FFacebookSDKonFacebookLoginErrorDelegate onFacebookLoginErrorDelegate; 38 | 39 | DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FFacebookSDKonFacebookLoginErrorDynDelegate, FString, Error); 40 | 41 | UPROPERTY(BlueprintAssignable) 42 | FFacebookSDKonFacebookLoginErrorDynDelegate onFacebookLoginError; 43 | 44 | 45 | 46 | void OnRegister() override; 47 | void OnUnregister() override; 48 | 49 | private: 50 | 51 | 52 | void onFacebookLoginCompleted_Handler() { onFacebookLoginCompleted.Broadcast(); } 53 | void onFacebookLoginCancelled_Handler() { onFacebookLoginCancelled.Broadcast(); } 54 | void onFacebookLoginError_Handler(FString Error) { onFacebookLoginError.Broadcast(Error); } 55 | 56 | 57 | 58 | }; 59 | -------------------------------------------------------------------------------- /Source/FacebookSDK/Private/FacebookSDKFunctions.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include "FacebookSDKPrivatePCH.h" 3 | 4 | #if PLATFORM_ANDROID 5 | 6 | #include "Android/AndroidJNI.h" 7 | #include "AndroidApplication.h" 8 | 9 | #define INIT_JAVA_METHOD(name, signature) \ 10 | if (JNIEnv* Env = FAndroidApplication::GetJavaEnv(true)) { \ 11 | name = FJavaWrapper::FindMethod(Env, FJavaWrapper::GameActivityClassID, #name, signature, false); \ 12 | check(name != NULL); \ 13 | } else { \ 14 | check(0); \ 15 | } 16 | 17 | #define DECLARE_JAVA_METHOD(name) \ 18 | static jmethodID name = NULL; 19 | 20 | DECLARE_JAVA_METHOD(AndroidThunkJava_FacebookSDK_Login); 21 | DECLARE_JAVA_METHOD(AndroidThunkJava_FacebookSDK_Logout); 22 | DECLARE_JAVA_METHOD(AndroidThunkJava_FacebookGetAccessToken); 23 | DECLARE_JAVA_METHOD(AndroidThunkJava_FacebookSDK_AppInvite); 24 | DECLARE_JAVA_METHOD(AndroidThunkJava_FacebookSDK_SharePhoto); 25 | DECLARE_JAVA_METHOD(AndroidThunkJava_FacebookSDK_isLoggedIn); 26 | 27 | 28 | 29 | void UFacebookSDKFunctions::InitJavaFunctions() 30 | { 31 | 32 | INIT_JAVA_METHOD(AndroidThunkJava_FacebookSDK_Login, "()V"); 33 | INIT_JAVA_METHOD(AndroidThunkJava_FacebookSDK_Logout, "()V"); 34 | INIT_JAVA_METHOD(AndroidThunkJava_FacebookGetAccessToken, "()Ljava/lang/String;"); 35 | INIT_JAVA_METHOD(AndroidThunkJava_FacebookSDK_AppInvite, "()V"); 36 | INIT_JAVA_METHOD(AndroidThunkJava_FacebookSDK_SharePhoto, "(Ljava/lang/String;Ljava/lang/String;)V"); 37 | INIT_JAVA_METHOD(AndroidThunkJava_FacebookSDK_isLoggedIn, "()Z"); 38 | 39 | } 40 | #undef DECLARE_JAVA_METHOD 41 | #undef INIT_JAVA_METHOD 42 | 43 | 44 | extern "C" void Java_com_epicgames_ue4_GameActivity_nativeFacebookOnLoginComplete(JNIEnv* jenv, jobject thiz) 45 | { 46 | FGraphEventRef EnterBackgroundTask = FFunctionGraphTask::CreateAndDispatchWhenReady([&]() 47 | { 48 | UFacebookSDKComponent::onFacebookLoginCompletedDelegate.Broadcast(); 49 | 50 | 51 | }, TStatId(), NULL, ENamedThreads::GameThread); 52 | } 53 | 54 | extern "C" void Java_com_epicgames_ue4_GameActivity_nativeFacebookOnLoginCancelled(JNIEnv* jenv, jobject thiz) 55 | { 56 | UFacebookSDKComponent::onFacebookLoginCancelledDelegate.Broadcast(); 57 | } 58 | 59 | extern "C" void Java_com_epicgames_ue4_GameActivity_nativeFacebookOnLoginError(JNIEnv* jenv, jobject thiz, jstring error) 60 | { 61 | FString Error; 62 | 63 | const char* charsError = jenv->GetStringUTFChars(error, 0); 64 | Error = FString(UTF8_TO_TCHAR(charsError)); 65 | jenv->ReleaseStringUTFChars(error, charsError); 66 | 67 | UFacebookSDKComponent::onFacebookLoginErrorDelegate.Broadcast(Error); 68 | } 69 | 70 | 71 | #endif 72 | 73 | 74 | 75 | 76 | 77 | bool UFacebookSDKFunctions:: FacebookIsLoggedIn() { 78 | 79 | #if PLATFORM_ANDROID 80 | if (JNIEnv* Env = FAndroidApplication::GetJavaEnv(true)) 81 | { 82 | 83 | 84 | bool ret = FJavaWrapper::CallBooleanMethod(Env, FJavaWrapper::GameActivityThis, AndroidThunkJava_FacebookSDK_isLoggedIn); 85 | 86 | 87 | 88 | UE_LOG(LogAndroid, Warning, TEXT("I found the java method FacebookSDKisLoggedIn\n")); 89 | 90 | return ret; 91 | 92 | } 93 | else 94 | { 95 | UE_LOG(LogAndroid, Warning, TEXT("ERROR Could note get Java ENV\n")); 96 | } 97 | #endif 98 | 99 | return false; 100 | 101 | } 102 | 103 | 104 | void UFacebookSDKFunctions::FacebookSDK_Login() { 105 | 106 | #if PLATFORM_ANDROID 107 | if (JNIEnv* Env = FAndroidApplication::GetJavaEnv(true)) 108 | { 109 | 110 | 111 | FJavaWrapper::CallVoidMethod(Env, FJavaWrapper::GameActivityThis, AndroidThunkJava_FacebookSDK_Login); 112 | 113 | 114 | 115 | UE_LOG(LogAndroid, Warning, TEXT("I found the java method FacebookSDKLogin\n")); 116 | } 117 | else 118 | { 119 | UE_LOG(LogAndroid, Warning, TEXT("ERROR Could note get Java ENV\n")); 120 | } 121 | #endif 122 | 123 | } 124 | 125 | void UFacebookSDKFunctions::FacebookSDK_Logout() { 126 | 127 | #if PLATFORM_ANDROID 128 | if (JNIEnv* Env = FAndroidApplication::GetJavaEnv(true)) 129 | { 130 | 131 | 132 | FJavaWrapper::CallVoidMethod(Env, FJavaWrapper::GameActivityThis, AndroidThunkJava_FacebookSDK_Logout); 133 | 134 | 135 | 136 | UE_LOG(LogAndroid, Warning, TEXT("I found the java method FacebookSDKLogout\n")); 137 | } 138 | else 139 | { 140 | UE_LOG(LogAndroid, Warning, TEXT("ERROR Could note get Java ENV\n")); 141 | } 142 | #endif 143 | 144 | } 145 | 146 | 147 | void UFacebookSDKFunctions::FacebookSDK_AppInvite() { 148 | 149 | #if PLATFORM_ANDROID 150 | if (JNIEnv* Env = FAndroidApplication::GetJavaEnv(true)) 151 | { 152 | 153 | 154 | FJavaWrapper::CallVoidMethod(Env, FJavaWrapper::GameActivityThis, AndroidThunkJava_FacebookSDK_AppInvite); 155 | 156 | 157 | 158 | UE_LOG(LogAndroid, Warning, TEXT("I found the java method FacebookSDK_AppInvite\n")); 159 | } 160 | else 161 | { 162 | UE_LOG(LogAndroid, Warning, TEXT("ERROR Could note get Java ENV\n")); 163 | } 164 | #endif 165 | 166 | } 167 | 168 | void UFacebookSDKFunctions::FacebookSDK_SharePhoto(FString AppName, FString Filename) { 169 | 170 | #if PLATFORM_ANDROID 171 | if (JNIEnv* Env = FAndroidApplication::GetJavaEnv(true)) 172 | { 173 | jstring AppNameArg = Env->NewStringUTF(TCHAR_TO_UTF8(*AppName)); 174 | jstring FilenameArg = Env->NewStringUTF(TCHAR_TO_UTF8(*Filename)); 175 | 176 | FJavaWrapper::CallVoidMethod(Env, FJavaWrapper::GameActivityThis, AndroidThunkJava_FacebookSDK_SharePhoto, AppNameArg, FilenameArg); 177 | 178 | Env->DeleteLocalRef(AppNameArg); 179 | Env->DeleteLocalRef(FilenameArg); 180 | 181 | UE_LOG(LogAndroid, Warning, TEXT("I found the java method FacebookSDK_SharePhoto()\n")); 182 | } 183 | else 184 | { 185 | UE_LOG(LogAndroid, Warning, TEXT("ERROR Could note get Java ENV\n")); 186 | } 187 | #endif 188 | 189 | } 190 | 191 | 192 | FString UFacebookSDKFunctions::FacebookGetAccessToken() 193 | { 194 | FString Result; 195 | 196 | #if PLATFORM_IOS 197 | 198 | #elif PLATFORM_ANDROID 199 | 200 | if (JNIEnv* Env = FAndroidApplication::GetJavaEnv()) 201 | { 202 | 203 | jstring AccessToken = (jstring)FJavaWrapper::CallObjectMethod(Env, FJavaWrapper::GameActivityThis, AndroidThunkJava_FacebookGetAccessToken); 204 | 205 | const char *s = Env->GetStringUTFChars(AccessToken, 0); 206 | Result = FString(UTF8_TO_TCHAR(s)); 207 | 208 | Env->ReleaseStringUTFChars(AccessToken, s); 209 | } 210 | #endif 211 | 212 | return Result; 213 | } -------------------------------------------------------------------------------- /Source/FacebookSDK/FacebookSDK_APL.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 18 | 19 | 20 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | ; 40 | public ; 41 | } 42 | ]]> 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | com.facebook,Facebook,4.18.0 58 | 59 | 60 | 61 | 62 | 63 | 64 | import com.facebook.FacebookSdk; 65 | import com.facebook.appevents.AppEventsLogger; 66 | import com.facebook.login.LoginResult; 67 | import com.facebook.login.LoginManager; 68 | import com.facebook.FacebookCallback; 69 | import com.facebook.CallbackManager; 70 | import com.facebook.FacebookException; 71 | import com.facebook.AccessToken; 72 | import com.facebook.share.model.AppInviteContent; 73 | import com.facebook.share.widget.AppInviteDialog; 74 | import com.facebook.share.model.SharePhoto; 75 | import com.facebook.share.model.SharePhotoContent; 76 | import com.facebook.share.model.ShareLinkContent; 77 | import com.facebook.share.widget.ShareDialog; 78 | import com.facebook.AccessTokenTracker; 79 | import com.facebook.HttpMethod; 80 | import com.facebook.Profile; 81 | import com.facebook.ProfileTracker; 82 | //import com.facebook.applinks.AppLinkData; 83 | //import bolts.AppLinks; 84 | //import bolts.AppLink; 85 | //import bolts.Task; 86 | //import bolts.Bolts; 87 | 88 | import java.util.HashSet; 89 | import java.util.Arrays; 90 | import android.text.TextUtils; 91 | import android.graphics.BitmapFactory; 92 | import android.os.Handler; 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | photos = new ArrayList(); 214 | photos.add(sharePhoto); 215 | Log.debug("FacebookSDK_SharePhotoArrayList"); 216 | SharePhotoContent sharePhotoContent = new SharePhotoContent.Builder().setPhotos(photos).build(); 217 | shareDialog.show(sharePhotoContent); 218 | Log.debug("FacebookSDK_ShareDialog"); 219 | 220 | } 221 | 222 | public File getScreenshot(String AppName, String Filename) 223 | { 224 | 225 | File dirpath = new File(Environment.getExternalStorageDirectory().getPath());//file provider 226 | //Log.debug("dirpath is" + "/" + dirpath.toString() + dirpath.exists()); 227 | 228 | //File picFile = new File(dirpath.getPath(), "UE4Game" +"/" + "Test_4_14" + "/" + "Test_4_14" + "/" + "Saved/Screenshots/Android" + "/" + "MyGame.png"); 229 | File picFile = new File(dirpath.getPath(), "UE4Game" +"/" + AppName + "/" + AppName + "/" + "Saved/Screenshots/Android" + "/" + Filename); 230 | //Log.debug("picFile is" + "/" + picFile.toString() + picFile.exists()); 231 | Log.debug("picFile is" + "/" + AppName + Filename); 232 | 233 | return picFile; 234 | 235 | } 236 | 237 | 238 | public native void nativeFacebookOnLoginComplete(); 239 | public native void nativeFacebookOnLoginCancelled(); 240 | public native void nativeFacebookOnLoginError(String error); 241 | 242 | 243 | ]]> 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | () 305 | { 306 | @Override 307 | public void onSuccess(LoginResult loginResult) 308 | { 309 | nativeFacebookOnLoginComplete(); 310 | Log.debug("Successful Facebook login"); 311 | } 312 | @Override 313 | public void onCancel() 314 | { 315 | nativeFacebookOnLoginCancelled(); 316 | Log.debug("Cancelled Facebook login"); 317 | } 318 | @Override 319 | public void onError(FacebookException exception) 320 | { 321 | /* 322 | try{} 323 | catch(FacebookException e){ 324 | 325 | Log.debug("Error on Facebook login" + e.toString()); 326 | } 327 | */ 328 | nativeFacebookOnLoginError(exception.toString()); 329 | Log.debug("Error on Facebook login2" + exception.toString()); 330 | 331 | } 332 | }); 333 | 334 | /* 335 | appLinkData = AppLinkData.createFromActivity(this); 336 | 337 | Uri targetUrl = AppLinks.getTargetUrlFromInboundIntent(this, getIntent()); 338 | if (targetUrl != null) { 339 | Log.debug("App Link Target URL: " + targetUrl.toString()); 340 | } else { 341 | appLinkData.fetchDeferredAppLinkData( 342 | this, 343 | new AppLinkData.CompletionHandler() { 344 | @Override 345 | public void onDeferredAppLinkDataFetched(AppLinkData appLinkData) { 346 | //process applink data 347 | Log.debug("App Link Data: " ); 348 | } 349 | }); 350 | Log.debug("App Link Data: 2" ); 351 | } 352 | */ 353 | ///// 354 | /* 355 | new Handler().postDelayed(new Runnable() { 356 | @Override 357 | public void run() { 358 | 359 | 360 | if (AccessToken.getCurrentAccessToken() != null) { 361 | Log.debug("facebook already logged in"); 362 | LoginManager.getInstance().logOut(); 363 | Log.debug("Log out of Facebook"); 364 | 365 | } 366 | 367 | 368 | } 369 | }, 100); 370 | */ 371 | 372 | /// 373 | 374 | 375 | ]]> 376 | 377 | 378 | 379 | 380 | 381 | accessTokenTracker.stopTracking(); 382 | profileTracker.stopTracking(); 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | // Call the 'deactivateApp' method to log an app event for use in analytics and advertising reporting. 406 | //AppEventsLogger.deactivateApp(getApplication()); 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | // Call the 'deactivateApp' method to log an app event for use in analytics and advertising reporting. 415 | //AppEventsLogger.deactivateApp(getApplication()); 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | if (callbackManager != null) 424 | { 425 | callbackManager.onActivityResult(requestCode, resultCode, data); 426 | } 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 439 | 440 | 441 | -------------------------------------------------------------------------------- /lib/Android/res/values/values.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | true 8 | false 9 | true 10 | true 11 | true 12 | false 13 | true 14 | false 15 | @android:color/black 16 | #7fa87f 17 | @android:color/black 18 | @android:color/black 19 | @color/material_deep_teal_200 20 | @color/material_deep_teal_500 21 | @color/material_grey_800 22 | @android:color/white 23 | @color/material_grey_850 24 | @color/material_grey_50 25 | #80ffffff 26 | #80000000 27 | @color/bright_foreground_material_light 28 | @color/bright_foreground_material_dark 29 | @android:color/white 30 | @android:color/black 31 | #ff5a595b 32 | #ffd6d7d7 33 | #80bebebe 34 | #80323232 35 | #ffbebebe 36 | #ff323232 37 | @android:color/white 38 | @android:color/black 39 | #6680cbc4 40 | #66009688 41 | @color/bright_foreground_disabled_material_dark 42 | @color/bright_foreground_disabled_material_light 43 | #ff37474f 44 | #ff263238 45 | #ff21272b 46 | #ff80cbc4 47 | #ff009688 48 | #fff5f5f5 49 | #ffe0e0e0 50 | #fffafafa 51 | #ff757575 52 | #ff424242 53 | #ff303030 54 | #ff212121 55 | @android:color/black 56 | @color/material_grey_600 57 | @color/material_grey_900 58 | @color/material_grey_100 59 | #ffffffff 60 | #de000000 61 | #4Dffffff 62 | #39000000 63 | #33ffffff 64 | #1f000000 65 | #b3ffffff 66 | #8a000000 67 | #36ffffff 68 | #24000000 69 | #ff616161 70 | #ffbdbdbd 71 | #ffbdbdbd 72 | #fff1f1f1 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 16dp 103 | 56dp 104 | 0dp 105 | 0dp 106 | 16dp 107 | 10dp 108 | 6dp 109 | 40dp 110 | 48dp 111 | 180dp 112 | 5dp 113 | -3dp 114 | 48dp 115 | 48dp 116 | 36dp 117 | 48dp 118 | @dimen/abc_control_inset_material 119 | 6dp 120 | 8dp 121 | @dimen/abc_control_padding_material 122 | 320dp 123 | 2dp 124 | 4dp 125 | 4dp 126 | 80% 127 | 100% 128 | 320dp 129 | 320dp 130 | 8dp 131 | 65% 132 | 95% 133 | 24dp 134 | 18dp 135 | 0.30 136 | 0.26 137 | 32dip 138 | 8dip 139 | 8dip 140 | 7dp 141 | 4dp 142 | 10dp 143 | 16dp 144 | @dimen/abc_action_bar_content_inset_material 145 | 296dp 146 | 320dip 147 | 160dip 148 | 2dp 149 | 2dp 150 | 20dp 151 | 3dp 152 | 14sp 153 | 14sp 154 | 14sp 155 | 12sp 156 | 34sp 157 | 45sp 158 | 56sp 159 | 112sp 160 | 24sp 161 | 22sp 162 | 18sp 163 | 16sp 164 | 14sp 165 | 16sp 166 | 16dp 167 | 20sp 168 | 20dp 169 | 0.30 170 | 0.26 171 | 0.26 172 | 0.20 173 | 0.12 174 | 64dp 175 | 64dp 176 | 12dp 177 | #3333B5E5 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 220 188 | 150 189 | 2 190 | 127 191 | 999 192 | Navigate home 193 | %1$s, %2$s 194 | %1$s, %2$s, %3$s 195 | Navigate up 196 | More options 197 | Done 198 | See all 199 | Choose an app 200 | OFF 201 | ON 202 | Search… 203 | Clear query 204 | Search query 205 | Search 206 | Submit query 207 | Voice search 208 | Share with 209 | Share with %s 210 | Collapse 211 | 999+ 212 | 223 | 228 | 232 | 237 | 243 | 250 | 254 | 258 | 263 | 267 | 271 | 275 | 279 | 283 | 287 | 291 | 295 | 299 | 301 | 303 | 307 | 311 | 315 | 320 | 324 | 327 | 331 | 335 | 339 | 343 | 347 | 351 | 355 | 359 | 363 | 367 | 371 | 377 | 380 | 382 | 384 | 389 | 391 | 393 | 395 | 400 | 405 | 411 | 415 | 418 | 429 | 434 | 440 | 444 | 450 | 476 | 480 | 507 | 662 | 684 | 839 | 861 | 868 | 873 | 894 | 899 | 904 | 914 | 923 | 932 | 935 | 942 | 950 | 957 | 967 | 970 | 973 | 978 | 982 | 986 | 989 | 994 | 998 | 1008 | 1013 | 1020 | 1026 | 1030 | 1034 | 1039 | 1041 | 1043 | 1046 | 1049 | 1051 | 1055 | 1062 | 1065 | 1068 | 1072 | 1074 | 1078 | 1080 | 1086 | 1088 | 1092 | 1100 | 1108 | 1120 | 1126 | 1135 | 1146 | 1149 | 1154 | 1166 | 1171 | 1209 | 1248 | 1259 | 1268 | 1271 | 1275 | 1278 | 1281 | 1284 | 1287 | 1291 | 1294 | 1297 | 1300 | 1304 | 1307 | 1311 | 1315 | 1332 | 1334 | 1339 | 1341 | 1349 | 1352 | 1355 | 1357 | 1360 | 1365 | 1367 | 1369 | 1378 | 1380 | 1382 | 1396 | 1403 | 1407 | 1411 | 1418 | 1420 | 1422 | 1424 | 1426 | 1431 | 1433 | 1435 | 1449 | 1454 | 1456 | 1459 | 1462 | 1464 | 1466 | 1478 | 1480 | 1484 | 1488 | 1490 | 1492 | 1494 | 1496 | 1498 |