Files
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

154 lines
5.5 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "OnlineSubsystemFacebook.h"
#include "OnlineSubsystemFacebookPrivate.h"
#include "Misc/CoreDelegates.h"
#include "IOS/IOSAppDelegate.h"
#include "Misc/ConfigCacheIni.h"
#include "OnlineExternalUIInterfaceFacebook.h"
#include "OnlineFriendsFacebook.h"
#include "OnlineIdentityFacebook.h"
#include "OnlineSharingFacebook.h"
#include "OnlineUserFacebook.h"
THIRD_PARTY_INCLUDES_START
#import <AuthenticationServices/AuthenticationServices.h>
#import <SafariServices/SafariServices.h>
#import <FBSDKCoreKit/FBSDKCoreKit-Swift.h>
THIRD_PARTY_INCLUDES_END
#define FACEBOOK_DEBUG_ENABLED 0
FOnlineSubsystemFacebook::FOnlineSubsystemFacebook(FName InInstanceName)
: FOnlineSubsystemFacebookCommon(InInstanceName)
{
}
FOnlineSubsystemFacebook::~FOnlineSubsystemFacebook()
{
}
static void OnFacebookOpenURL(UIApplication* application, NSURL* url, NSString* sourceApplication, id annotation)
{
[[FBSDKApplicationDelegate sharedInstance] application:application
openURL : url
sourceApplication : sourceApplication
annotation : annotation];
}
static void OnFacebookAppDidBecomeActive()
{
#if 0 // turn off analytics
dispatch_async(dispatch_get_main_queue(), ^
{
[[FBSDKAppEvents shared] activateApp];
});
#endif
}
/** Add verbose logging for various Facebook SDK features */
void SetFBLoggingBehavior()
{
[[FBSDKSettings sharedSettings] enableLoggingBehavior:FBSDKLoggingBehaviorAppEvents];
#if FACEBOOK_DEBUG_ENABLED
[[FBSDKSettings sharedSettings] enableLoggingBehavior:FBSDKLoggingBehaviorAccessTokens];
[[FBSDKSettings sharedSettings] enableLoggingBehavior:FBSDKLoggingBehaviorPerformanceCharacteristics];
[[FBSDKSettings sharedSettings] enableLoggingBehavior:FBSDKLoggingBehaviorAppEvents];
[[FBSDKSettings sharedSettings] enableLoggingBehavior:FBSDKLoggingBehaviorInformational];
[[FBSDKSettings sharedSettings] enableLoggingBehavior:FBSDKLoggingBehaviorCacheErrors];
[[FBSDKSettings sharedSettings] enableLoggingBehavior:FBSDKLoggingBehaviorUIControlErrors];
[[FBSDKSettings sharedSettings] enableLoggingBehavior:FBSDKLoggingBehaviorGraphAPIDebugWarning];
[[FBSDKSettings sharedSettings] enableLoggingBehavior:FBSDKLoggingBehaviorGraphAPIDebugInfo];
[[FBSDKSettings sharedSettings] enableLoggingBehavior:FBSDKLoggingBehaviorNetworkRequests];
[[FBSDKSettings sharedSettings] enableLoggingBehavior:FBSDKLoggingBehaviorDeveloperErrors];
#endif
}
/** Print various details about the Facebook SDK */
void PrintSDKStatus()
{
NSString* AppId = [[FBSDKSettings sharedSettings] appID];
NSString* SDKVersion = [[FBSDKSettings sharedSettings] sdkVersion];
NSString* GraphVer = [[FBSDKSettings sharedSettings] graphAPIVersion];
NSString* OverrideAppId = [[FBSDKAppEvents shared] loggingOverrideAppID];
NSSet* LoggingBehaviors = [[FBSDKSettings sharedSettings] loggingBehaviors];
UE_LOG_ONLINE(Log, TEXT("Facebook SDK:%s"), *FString(SDKVersion));
UE_LOG_ONLINE(Log, TEXT("AppId:%s"), *FString(AppId));
UE_LOG_ONLINE(Log, TEXT("OverrideAppId:%s"), *FString(OverrideAppId));
UE_LOG_ONLINE(Log, TEXT("GraphVer:%s"), *FString(GraphVer));
if (LoggingBehaviors != nil && [LoggingBehaviors count] > 0)
{
UE_LOG_ONLINE(Verbose, TEXT("Logging:"));
for (NSString* loggingBehavior in LoggingBehaviors)
{
UE_LOG_ONLINE(Verbose, TEXT(" - %s"), *FString(loggingBehavior));
}
}
}
bool FOnlineSubsystemFacebook::Init()
{
if (!FOnlineSubsystemFacebookCommon::Init())
{
return false;
}
FIOSCoreDelegates::OnOpenURL.AddStatic(&OnFacebookOpenURL);
FCoreDelegates::ApplicationHasReactivatedDelegate.AddStatic(&OnFacebookAppDidBecomeActive);
auto IosIdentity = MakeShared<FOnlineIdentityFacebook>(this);
IosIdentity->Init();
FacebookIdentity = MoveTemp(IosIdentity);
FacebookSharing = MakeShared<FOnlineSharingFacebook>(this);
FacebookFriends = MakeShared<FOnlineFriendsFacebook>(this);
FacebookUser = MakeShared<FOnlineUserFacebook>(this);
FacebookExternalUI = MakeShared<FOnlineExternalUIFacebook>(this);
FString AnalyticsId;
GConfig->GetString(TEXT("OnlineSubsystemFacebook"), TEXT("AnalyticsId"), AnalyticsId, GEngineIni);
NSString* APIVerStr = [NSString stringWithFString:GetAPIVer()];
[[FBSDKSettings sharedSettings] setGraphAPIVersion:APIVerStr];
SetFBLoggingBehavior();
/** Sets whether data such as that generated through FBSDKAppEvents and sent to Facebook should be restricted from being used for other than analytics and conversions */
[[FBSDKSettings sharedSettings] setIsEventDataUsageLimited:TRUE];
// Trigger Facebook SDK last now that everything is setup
dispatch_async(dispatch_get_main_queue(), ^
{
UIApplication* sharedApp = [UIApplication sharedApplication];
NSDictionary* launchDict = [IOSAppDelegate GetDelegate].launchOptions;
if ([[FBSDKSettings sharedSettings] isAdvertiserIDCollectionEnabled])
{
if (!AnalyticsId.IsEmpty())
{
NSString* AnalyticsStr = [NSString stringWithFString:AnalyticsId];
[[FBSDKAppEvents shared] setLoggingOverrideAppID:AnalyticsStr];
}
[[FBSDKAppEvents shared] activateApp];
}
[[FBSDKApplicationDelegate sharedInstance] application:sharedApp didFinishLaunchingWithOptions: launchDict];
PrintSDKStatus();
});
return true;
}
bool FOnlineSubsystemFacebook::Shutdown()
{
StaticCastSharedPtr<FOnlineIdentityFacebook>(FacebookIdentity)->Shutdown();
return FOnlineSubsystemFacebookCommon::Shutdown();
}
bool FOnlineSubsystemFacebook::IsEnabled() const
{
return FOnlineSubsystemFacebookCommon::IsEnabled();
}