PLUG UNREAL应用指南

应用指南

下载最新版本

将所下载示例项目中包含的Plugins/CafeSDKPlugin文件夹复制到项目中后,根据操作系统,按照如下步骤设置开发环境。

2.1 Android设置

将所下载示例项目中包含的Build/Android文件夹下的如下文件和文件夹复制到项目中。

  • ManifestApplicationAdditions.txt

  • JavaLibs文件夹

2.2 iOS设置

在DefaultEngine.ini文件中,添加如下项目设置。

AdditionalLinkerFlags=-ObjC
AdditionalShippingLinkerFlags=-ObjC
AdditionalPlistData=<key>CFBundleURLTypes</key> <array>    <dict>            <key>CFBundleURLSchemes</key>           <array>               <string>gLinkSample</string>        </array>    </dict>   </array><key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/></dict> <key>LSApplicationQueriesSchemes</key><array><string>navercafe</string><string>naversearchapp</string><string>naversearchthirdlogin</string></array>    <key>CFBundleURLTypes</key><array><dict><key>CFBundleTypeRole</key><string>Editor</string><key>CFBundleURLSchemes</key><array><string>gLinkSample</string></array></dict></array><key>NSPhotoLibraryUsageDescription</key><string>Access your photos to create a post.</string>

在Build.cs文件中添加如下框架设置。

if (Target.Platform == UnrealTargetPlatform.IOS)
{
    // Add framework
    PublicAdditionalFrameworks.Add(
        new UEBuildFramework(
            "NaverCafeSDK",
            "../../ThirdPartyFrameworks/iOS/NaverCafeSDK.embeddedframework.zip",
            "Resources/NaverCafeSDK.bundle"
        )
    );
    PublicAdditionalFrameworks.Add(
        new UEBuildFramework(
            "NaverLogin",
            "../../ThirdPartyFrameworks/iOS/NaverLogin.embeddedframework.zip",
            "Resources/NaverAuth.bundle"
        )
    );
    PublicAdditionalFrameworks.Add(
        new UEBuildFramework(
            "AFNetworking",
            "../../ThirdPartyFrameworks/iOS/AFNetworking.embeddedframework.zip"
        )
    );
    PublicAdditionalFrameworks.Add(
        new UEBuildFramework(
            "SDWebImage",
            "../../ThirdPartyFrameworks/iOS/SDWebImage.embeddedframework.zip"
        )
    );
    PublicAdditionalFrameworks.Add(
        new UEBuildFramework(
            "FLAnimatedImage",
            "../../ThirdPartyFrameworks/iOS/FLAnimatedImage.embeddedframework.zip"
        )
    );
    PublicAdditionalFrameworks.Add(
        new UEBuildFramework(
            "ApiGateway",
            "../../ThirdPartyFrameworks/iOS/ApiGateway.embeddedframework.zip"
        )
    );

    PublicFrameworks.AddRange(
        new string[] {
            "UIKit",
            "Foundation",
            "MediaPlayer",
            "SystemConfiguration",
            "Security",
            "MobileCoreServices",
            "GameKit",
            "AssetsLibrary",
        }
    );
    PublicWeakFrameworks.Add("ReplayKit");
}

3. 初始化

根据PLUG SDK支持的语言,按照如下方法将PLUG SDK初始化。

3.1 PLUG SDK初始化(仅支持韩语 - NAVERCafe)

将仅支持韩语的PLUG SDK初始化时,设置如下初始化信息。

  • 在“使用NAVER ID登录开发人员中心”注册应用程序后获得的客户端ID(ClientId)和客户端Secret(ClientSecret)。

  • 在NAVERCafe创建Cafe后获得的Cafe ID。

  • 在“使用NAVER ID登录开发人员中心”注册应用程序时输入的URL Scheme。

if (FCafeSDKPluginModule::IsAvailable())
{
    UCafeSdkBlueprintLibrary::Init("U5ZHoj_OStOHOJ8mec_s", "piPHPA9i4E", 28334359);
}

3.2 PLUG SDK初始化(仅支持外语)

将仅支持外语的PLUG SDK初始化时,设置如下初始化信息。

  • 通过PLUG SDK合作申请获得的Consumer Key和Consumer Secret

  • 通过PLUG SDK合作申请获得的Community No和Lounge No

  • consumerKey:创建社区后获得的Consumer Key

  • consumerSecretKey:创建社区后获得的Consumer Secret Key

  • cummunityNo:创建社区后获得的Cummunity No

  • loungeNo:创建lounge后获得的Lounge No

if (FCafeSDKPluginModule::IsAvailable())
{
    /**
     * @param consumerKey       Consumer Key
     * @param consumerSecretKey Consumer Secret Key 
     * @param communityNo       社区编号
     * @param loungeNo          Lounge编号                      
     */
     UCafeSdkBlueprintLibrary::InitGlobal("PLUGKEY", "PLUGSECRET", 1, 58);
}

4. 启动PLUG SDK

完成初始化后,运行PLUG SDK。

4.1 StartHome()方法

StartHome()是启动PLUG SDK的方法。

UFUNCTION(BlueprintCallable, Category = "Naver CafeSdk")
static void StartHome();

4.2 ShowWidgetWhenUnloadSdk()方法

在PLUG SDK点击收起按钮时,使微件显示在界面上的方法。

UFUNCTION(BlueprintCallable, Category = "Naver CafeSdk")
static void ShowWidgetWhenUnloadSdk(bool bUse);

4.3 SetUseVideoRecord()方法

SetUseVideoRecord() 是使视频录制按钮显示在PLUG SDK微件界面上的方法。(iOS 9.0以上版本)

UFUNCTION(BlueprintCallable, Category = "Naver CafeSdk")
static void SetUseVideoRecord(bool bUse);

4.4 回调委托

设置回调委托,利用回调函数传递PLUG SDK中发生的用户事件。

通过回调委托调用的方法,可执行运行或退出PLUG SDK、发帖(图片/视频添加数量)、注册、评论或投票等任务。

static FOnCafeSdkStarted OnCafeSdkStarted;
static FOnCafeSdkStopped OnCafeSdkStopped;
static FOnCafeSdkClickAppSchemeBanner OnCafeSdkClickAppSchemeBanner;
static FOnCafeSdkJoined OnCafeSdkJoined;
static FOnCafeSdkPostedArticle OnCafeSdkPostedArticle;
static FOnCafeSdkPostedComment OnCafeSdkPostedComment;
static FOnCafeSdkRecordFinish OnCafeSdkRecordFinish;
static FOnCafeSdkDidVote OnCafeSdkDidVote;

支持国外社区和韩国国内NAVERCafe的PLUG初始化

对于同时支持国外社区和韩国国内NAVER Cafe的PLUG,需要同时完成为支持国外社区的初始化设置和为支持韩国国内NAVER Cafe的初始化设置。

默认通道设置

PLUG中不同语言社区的默认通道均适用设备所设语言。

下面是将默认通道设置为特定语言的示例。

void ACafeSDKSampleProjectGameMode::InitGame(const FString& MapName, const FString& Options, FString& ErrorMessage)
{
    AGameMode::InitGame(MapName, Options, ErrorMessage);
    if (FCafeSDKPluginModule::IsAvailable())
    {
        UCafeSdkBlueprintLibrary::SetChannelCode("en");
        ...
    }
}

PLUG启动与退出

以特定标签被选择的状态启动PLUG或退出PLUG。

StartHome()方法

以主页标签被选择的状态启动PLUG。

static void StartHome()

下面是实现StartHome()方法的示例。

   /**
   * 以主页标签启动
   */
    UFUNCTION(BlueprintCallable, Category = "Naver CafeSdk")
    static void StartHome();

横屏模式及竖屏模式

PLUG同时支持横屏模式和竖屏模式。

Android

Android环境下,无需另外设置,系统将根据界面的横竖状态自动应用横屏或竖屏模式。

iOS

iOS环境下,利用setOrientationIsLandscape: 方法应用横屏或竖屏模式。

下面是以横屏模式运行PLUG的示例。

//缺省值为YES
//横屏模式
[[NCSDKManager getSharedInstance] setOrientationIsLandscape:YES];

下面是以竖屏模式运行PLUG的示例

//竖屏模式
[[NCSDKManager getSharedInstance] setOrientationIsLandscape:NO];

透明度调节

如果利用PLUG界面左上方的透明度调节滑块调节透明度,则可以同时使用游戏和Cafe服务。

透明度 / 说明

Alpha值100% / 向PLUG报告点击事件

Alpha值100%以下 / 向游戏报告点击事件

Android

在Android环境下,利用setTransparentable()方法设置是否使用透明度调节滑块。

public static void setTransparentable(Activity activity, boolean isTransparentable)

将isTransparentable参数值设置为true时,可以使用透明度调节滑块(缺省值:true).

下面是使用透明度调节滑块的示例。

  /**
   * 设置是否使用透明度调节滑块
   *
   * @param isTransparentable 确定是否能使用透明度调节功能的boolean值
   */
  Glink.setTransparentable(activity, true)

iOS

在iOS环境下是否使用透明度调节滑块,用disableTransparentSlider: 方法设置。

(void)disableTransparentSlider:(BOOL)disable;

将disable参数值设置为YES时,可以使用透明度调节滑块(缺省值:YES)。

下面是使用透明度调节滑块的示例。

/*
 取消透明度调节功能
 default : YES
 */
//使用透明度调节功能
[[NCSDKManager getSharedInstance] disableTransparentSlider:YES];

下面是不使用透明度调节滑块的示例。

//取消透明度功能
[[NCSDKManager getSharedInstance] disableTransparentSlider:NO];

微件

微件是点击PLUG收起按钮时自动显示在界面中的构成要素。利用微件可在游戏内的任何环境下使用PLUG。

微件显示

点击PLUG的收起按钮时,利用ShowWidgetWhenUnloadSdk()方法设置是否显示微件。

static void ShowWidgetWhenUnloadSdk(bool show)

如果将show参数值设置为true,收起PLUG窗口时显示微件(缺省值:true)。

下面是显示微件的示例。

  /**
   * 决定PLUG窗口收起时是否显示微件
   *
   * @param show 确定是否显示微件的Boolean值
   */
    UFUNCTION(BlueprintCallable, Category = "Naver CafeSdk")
    static void ShowWidgetWhenUnloadSdk(bool bUse)

微件默认位置设置

微件在第一次运行时,显示在界面左侧中央位置。如果要设置微件第一次运行时的默认显示位置,使用SetWidgetStartPosition()方法。

但如果是在用户移动微件位置后重新运行的情况,则显示在用户移动后的最终位置。

static void SetWidgetStartPosition(bool bIsLeft, int32 HeightPercentage);

下面是将微件默认位置设置在界面右侧距上部20%处的示例。

  /**
   * bIsLeft:true时显示在左侧,false时显示在右侧。
   * HeightPercentage:竖直方向的位置可使用百分数指定。

   */
  UCafeSdkBlueprintLibrary::SetWidgetStartPosition(false, 20);

截屏

点击微件的截屏按钮可以截取游戏画面。

截屏按钮

点击截屏按钮截屏的功能,通过注册微件截屏按钮的点击监听器OnScreenshotCaptured来实现。

static FOnScreenshotCaptured& OnScreenshotCaptured()

下面是实现微件截屏按钮点击监听器的示例。.

  /**
   * 注册截屏按钮点击回调函数
   */
void ACafeSDKSampleProjectGameMode::InitGame(const FString& MapName, const FString& Options, FString& ErrorMessage)
{
...        
        GEngine->GameViewport->OnScreenshotCaptured().AddUObject(this,
            &ACafeSDKSampleProjectGameMode::OnScreenshotCaptured);
...            
    }
}


  /**
   * 设置微件截屏按钮点击监听器
   */
void ACafeSDKSampleProjectGameMode::OnScreenshotCaptured(int32 Width, int32 Height, const TArray<FColor>& Colors)
{
    auto Bitmap = TArray<FColor>(Colors);
    GetHighResScreenshotConfig().MergeMaskIntoAlpha(Bitmap);

    FIntRect SourceRect(0, 0, GScreenshotResolutionX, GScreenshotResolutionY);
    if (GIsHighResScreenshot)
    {
        SourceRect = GetHighResScreenshotConfig().CaptureRegion;
    }

    FString ScreenshotName = FScreenshotRequest::GetFilename();

    if (!FPaths::GetExtension(ScreenshotName).IsEmpty())
    {
        ScreenshotName = FPaths::GetBaseFilename(ScreenshotName, false);
        ScreenshotName += TEXT(".png");
    }

    // Save the contents of the array to a png file.
    TArray<uint8> CompressedBitmap;
    FImageUtils::CompressImageArray(Width, Height, Bitmap, CompressedBitmap);
    FFileHelper::SaveArrayToFile(CompressedBitmap, *ScreenshotName);

#if PLATFORM_ANDROID
    extern FString GFilePathBase;
    FString BasePath = GFilePathBase + TEXT("/UE4Game/") + FApp::GetGameName() + TEXT("/") + FApp::GetGameName() + TEXT("/Saved/Screenshots/");
    FString ScreenshotPath = FPaths::ConvertRelativePathToFull(BasePath, ScreenshotName);
    UCafeSdkBlueprintLibrary::StartImageWrite(TEXT("file://") + ScreenshotPath);
#elif PLATFORM_IOS
    FString Result = ScreenshotName;
    Result.ReplaceInline(TEXT("../"), TEXT(""));
    Result.ReplaceInline(TEXT(".."), TEXT(""));
    Result.ReplaceInline(FPlatformProcess::BaseDir(), TEXT(""));

    FString WritePathBase = FString([NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]) + TEXT("/");
    UCafeSdkBlueprintLibrary::StartImageWrite(WritePathBase + Result);
#endif
}

截屏功能使用设置

使用SetUseScreenshot()方法设置是否使用截屏功能。

static void SetUseScreenshot(boolean use);

将use参数值设置为true时,微件显示截屏按钮(缺省值:true)。

/**
* 使用截屏功能
*/
UCafeSdkBlueprintLibrary::SetUseScreenshot(true);

视频录制

在微件界面点击视频录制按钮可录制游戏画面。

视频录制结束后,需要处理的内容通过注册录制结束监听器OnCafeSdkRecordFinish来实现。

static FOnCafeSdkRecordFinish OnCafeSdkRecordFinish;

下面是实现录制结束监听器的示例。

  /**
   * 注册录制结束回调
   */
void ACafeSDKSampleProjectGameMode::InitGame(const FString& MapName, const FString& Options, FString& ErrorMessage)
{
...        
        FCafeSDKPluginModule::OnCafeSdkRecordFinish.AddUObject(this,
            &ACafeSDKSampleProjectGameMode::OnCafeSdkRecordFinish);
...            
    }
}

  /**
   * 设置录制结束监听器
   */
void ACafeSDKSampleProjectGameMode::OnCafeSdkRecordFinish(const FString& FileUri)
{
    UCafeSdkBlueprintLibrary::StartVideoWrite(FileUri);
}

视频录制

点击微件视频录制按钮可在游戏过程中录制游戏画面。

  • 视频录制功能支持Android 5.0以上设备。

  • 视频录制功能支持iOS 9.0以上设备。

视频录制功能使用设置

使用SetUseVideoRecord()方法设置是否使用视频录制功能。

static void SetUseVideoRecord(bool use)

将use参数值设置为true时,微件显示视频录制按钮(缺省值:false)。

低于Android 5.0或iOS 9.0版本的设备,即使将use参数值设置为true,也不会在微件上显示视频录制按钮。

下面是使用视频录制功能的示例。

/**
   * 决定是否使用视频录制功能
   *
   * @param use 确定是否使用视频录制功能的boolean值
   */
...
    UCafeSdkBlueprintLibrary::SetUseVideoRecord(true);
...

录制结束回调监听器

视频录制结束后,需要处理的内容通过注册监听器OnCafeSdkRecordFinish来实现。

static FOnCafeSdkRecordFinish OnCafeSdkRecordFinish;

下面是实现录制结束监听器的示例。

/**
   * 注册录制结束回调
   */
void ACafeSDKSampleProjectGameMode::InitGame(const FString& MapName, const FString& Options, FString& ErrorMessage)
{
...        
        FCafeSDKPluginModule::OnCafeSdkRecordFinish.AddUObject(this,
            &ACafeSDKSampleProjectGameMode::OnCafeSdkRecordFinish);
...            
    }
}

  /**
   * 设置录制结束监听器
   */
void ACafeSDKSampleProjectGameMode::OnCafeSdkRecordFinish(const FString& FileUri)
{
    UCafeSdkBlueprintLibrary::StartVideoWrite(5, TEXT("subject"), TEXT("text"), FileUri);
}

App Scheme处理

在游戏中,点击PLUG主页显示的横幅图片,即可移动至App Scheme运行游戏功能。

用于引导前往App Scheme的横幅图片在Cafe管理菜单下添加。

Android

Android环境下存在可前往App Scheme的横幅图片时,如果按照下面的方法设置OnCafeSdkClickAppSchemeBanner,则可以实现发生点击事件时处理App Scheme的功能。

static FOnCafeSdkClickAppSchemeBanner OnCafeSdkClickAppSchemeBanner;

下面是实现App Scheme处理的监听器示例。

void ACafeSDKSampleProjectGameMode::InitGame(const FString& MapName, const FString& Options, FString& ErrorMessage)
{
...
        FCafeSDKPluginModule::OnCafeSdkClickAppSchemeBanner.AddUObject(this,
            &ACafeSDKSampleProjectGameMode::OnCafeSdkClickAppSchemeBanner);
...        
    }
}

// 设置App Scheme点击监听器
void ACafeSDKSampleProjectGameMode::OnCafeSdkClickAppSchemeBanner(const FString& AppScheme)
{
    FString Message = FString::Printf(TEXT("OnCafeSdkClickAppSchemeBanner: %s"), *AppScheme);
    ShowMessage(Message);
}

iOS

在iOS环境下,点击前往App Scheme的横幅图片,即可运行openURL:方法来处理App Scheme的功能,按照如下示例设置AppDelegate。

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
...
//利用AppDelegate处理添加至管理菜单的App Scheme
//ex : gLinkSample://test
    if ([[url scheme] isEqualToString:@"gLinkSample"]) {
        if ([[url host] isEqualToString:@"test"]) {
            //todo
        }
    }
...
}

回调监听器

PLUG中发生的事件通过注册回调监听器来处理。

Unreal版NAVER Cafe PLUG库中注册有如下回调监听器。

void ACafeSDKSampleProjectGameMode::InitGame(const FString& MapName, const FString& Options, FString& ErrorMessage)
{
    AGameMode::InitGame(MapName, Options, ErrorMessage);

    if (FCafeSDKPluginModule::IsAvailable())
    {
        UCafeSdkBlueprintLibrary::Init("U5ZHoj_OStOHOJ8mec_s", "piPHPA9i4E", 28334359);

        //启动PLUG
        FCafeSDKPluginModule::OnCafeSdkStarted.AddUObject(this,
            &ACafeSDKSampleProjectGameMode::OnCafeSdkStarted);

        //退出PLUG
        FCafeSDKPluginModule::OnCafeSdkStopped.AddUObject(this,
            &ACafeSDKSampleProjectGameMode::OnCafeSdkStopped);

        //App Scheme
        FCafeSDKPluginModule::OnCafeSdkClickAppSchemeBanner.AddUObject(this,
            &ACafeSDKSampleProjectGameMode::OnCafeSdkClickAppSchemeBanner);

        //注册Cafe
        FCafeSDKPluginModule::OnCafeSdkJoined.AddUObject(this,
            &ACafeSDKSampleProjectGameMode::OnCafeSdkJoined);

        //发帖
        FCafeSDKPluginModule::OnCafeSdkPostedArticle.AddUObject(this,
            &ACafeSDKSampleProjectGameMode::OnCafeSdkPostedArticle);

        //发表评论
        FCafeSDKPluginModule::OnCafeSdkPostedComment.AddUObject(this,
            &ACafeSDKSampleProjectGameMode::OnCafeSdkPostedComment);

        //贴文内投票
        FCafeSDKPluginModule::OnCafeSdkDidVote.AddUObject(this,
            &ACafeSDKSampleProjectGameMode::OnCafeSdkDidVote);

        //微件视频录制结束
        FCafeSDKPluginModule::OnCafeSdkRecordFinish.AddUObject(this,
            &ACafeSDKSampleProjectGameMode::OnCafeSdkRecordFinish);

        //截屏
        GEngine->GameViewport->OnScreenshotCaptured().AddUObject(this,
            &ACafeSDKSampleProjectGameMode::OnScreenshotCaptured);
    }
}

启动PLUG监听器

OnCafeSdkStarted是处理PLUG启动时所发生事件的回调监听器。

static FOnCafeSdkStarted OnCafeSdkStarted;

下面是实现启动PLUG监听器的示例。

   // 设置启动PLUG监听器
void ACafeSDKSampleProjectGameMode::OnCafeSdkStarted()
{
    ShowMessage("OnCafeSdkStarted");
}

退出PLUG监听器

OnCafeSdkStopped是处理退出PLUG时所发生事件的回调监听器。

static FOnCafeSdkStopped OnCafeSdkStopped;

下面是实现退出PLUG监听器的示例。

// 设置退出PLUG监听器
void ACafeSDKSampleProjectGameMode::OnCafeSdkStopped()
{
    ShowMessage("OnCafeSdkStopped");
}

App Scheme监听器

OnCafeSdkClickAppSchemeBanner是在Android环境下,处理游戏用户点击前往App Scheme的横幅图片时所发生事件的回调监听器。

static FOnCafeSdkClickAppSchemeBanner OnCafeSdkClickAppSchemeBanner;

下面是实现App Scheme监听器的示例。.

// 设置App Scheme监听器
void ACafeSDKSampleProjectGameMode::OnCafeSdkClickAppSchemeBanner(const FString& AppScheme)
{
    FString Message = FString::Printf(TEXT("OnCafeSdkClickAppSchemeBanner: %s"), *AppScheme);
    ShowMessage(Message);
}

Cafe 注册监听器

OnCafeSdkJoined是处理游戏用户通过PLUG注册Cafe时所发生事件的回调监听器。

static FOnCafeSdkJoined OnCafeSdkJoined;

下面是实现Cafe注册监听器的示例。

// 设置Cafe注册监听器
void ACafeSDKSampleProjectGameMode::OnCafeSdkJoined()
{
    ShowMessage("OnCafeSdkJoined");
}

发帖监听器

OnCafeSdkPostedArticle是处理用户在PLUG发帖时所发生事件的回调监听器。

static FOnCafeSdkPostedArticle OnCafeSdkPostedArticle;

下面是实现发帖监听器的示例。

   /** 设置发帖监听器
     * @param menuId 发帖的menuId
     * @param imageCount 同附图片文件的数量
     * @param videoCount 同附视频文件的数量
     **/
void ACafeSDKSampleProjectGameMode::OnCafeSdkPostedArticle(int32 MenuId, int32 ImageCount, int32 VideoCount)
{
    FString Message = FString::Printf(TEXT("OnCafeSdkPostedArticle: %d, %d, %d"), MenuId, ImageCount, VideoCount);
    ShowMessage(Message);
}

评论发表监听器

OnCafeSdkPostedComment是处理用户在PLUG发表评论时所发生事件的回调监听器。.

static FOnCafeSdkPostedComment OnCafeSdkPostedComment;

下面是实现评论发表监听器的示例。

   // 设置评论发表监听器
void ACafeSDKSampleProjectGameMode::OnCafeSdkPostedComment(int32 ArticleId)
{
    FString Message = FString::Printf(TEXT("OnCafeSdkPostedComment: %d"), ArticleId);
    ShowMessage(Message);
}

投票结束监听器

OnCafeSdkDidVote是处理用户在PLUG参与发起投票的贴文投票活动时所发生事件的回调监听器。

static FOnCafeSdkDidVote OnCafeSdkDidVote;

下面是实现投票结束监听器的示例。

   // 设置投票结束监听器
void ACafeSDKSampleProjectGameMode::OnCafeSdkDidVote(int32 ArticleId)
{
    FString Message = FString::Printf(TEXT("OnCafeSdkDidVote: %d"), ArticleId);
    ShowMessage(Message);
}

截屏按钮点击监听器

OnScreenshotCaptured是处理用户点击微件上截屏按钮时所发生事件的回调监听器。关于截屏按钮的详细内容,请参考“微件”部分。

static FOnScreenshotCaptured& OnScreenshotCaptured()

下面是实现截屏按钮点击监听器的示例。只有通过回调监听器设置截屏功能,才能在点击截屏按钮时进行截屏。

  /**
   * 设置微件截屏按钮点击监听器
   */
void ACafeSDKSampleProjectGameMode::OnScreenshotCaptured(int32 Width, int32 Height, const TArray<FColor>& Colors)
{
    auto Bitmap = TArray<FColor>(Colors);
    GetHighResScreenshotConfig().MergeMaskIntoAlpha(Bitmap);

    FIntRect SourceRect(0, 0, GScreenshotResolutionX, GScreenshotResolutionY);
    if (GIsHighResScreenshot)
    {
        SourceRect = GetHighResScreenshotConfig().CaptureRegion;
    }

    FString ScreenshotName = FScreenshotRequest::GetFilename();

    if (!FPaths::GetExtension(ScreenshotName).IsEmpty())
    {
        ScreenshotName = FPaths::GetBaseFilename(ScreenshotName, false);
        ScreenshotName += TEXT(".png");
    }

    // Save the contents of the array to a png file.
    TArray<uint8> CompressedBitmap;
    FImageUtils::CompressImageArray(Width, Height, Bitmap, CompressedBitmap);
    FFileHelper::SaveArrayToFile(CompressedBitmap, *ScreenshotName);

#if PLATFORM_ANDROID
    extern FString GFilePathBase;
    FString BasePath = GFilePathBase + TEXT("/UE4Game/") + FApp::GetGameName() + TEXT("/") + FApp::GetGameName() + TEXT("/Saved/Screenshots/");
    FString ScreenshotPath = FPaths::ConvertRelativePathToFull(BasePath, ScreenshotName);
    UCafeSdkBlueprintLibrary::StartImageWrite(-1, "", "", TEXT("file://") + ScreenshotPath);
#elif PLATFORM_IOS
    FString Result = ScreenshotName;
    Result.ReplaceInline(TEXT("../"), TEXT(""));
    Result.ReplaceInline(TEXT(".."), TEXT(""));
    Result.ReplaceInline(FPlatformProcess::BaseDir(), TEXT(""));

    FString WritePathBase = FString([NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]) + TEXT("/");
    UCafeSdkBlueprintLibrary::StartImageWrite(-1, "", "", WritePathBase + Result);
#endif
}

录制结束监听器

OnCafeSdkRecordFinish是处理PULG视频录制结束时所发生事件的回调监听器。

static FOnCafeSdkRecordFinish OnCafeSdkRecordFinish;

下面是实现录制结束监听器的示例。

  /** 设置录制结束监听器
   * 决定是否使用视频录制功能
   *
   * @param uri 所录制视频文件的路径URI
   */
void ACafeSDKSampleProjectGameMode::OnCafeSdkRecordFinish(const FString& FileUri)
{
    UCafeSdkBlueprintLibrary::StartVideoWrite(5, TEXT("subject"), TEXT("text"), FileUri);
}

游戏ID绑定

PLUG支持绑定用户的游戏ID和CafeID来进行管理。绑定后的游戏ID和Cafe ID目录可在Cafe的管理菜单下确认。

如果要绑定游戏ID和Cafe ID,使用SyncGameUserId()方法。

static void SyncGameUserId(FString GameUserId)

下面是绑定游戏ID和Cafe ID的示例。

  /**
   * 绑定游戏ID和Cafe ID
   *
   * @param gameUserId 游戏ID
   */
void ACafeSDKSampleProjectGameMode::InitGame(const FString& MapName, const FString& Options, FString& ErrorMessage)
{
...    
   UCafeSdkBlueprintLibrary::SyncGameUserId("userGameID");
...
}

主题颜色变更

可变更PLUG的主题颜色。

如果要更改主题颜色,使用SetThemeColor()方法。

/** 
* ThemeColorCSSString参数的缺省值为‘#00c73c’
* TabBackgroundColorCSSString参数的缺省值为‘#44484e’
* TabBackgroundColorCSSString参数建议使用缺省值
**/

void UCafeSdkBlueprintLibrary::SetThemeColor(FString ThemeColorCSSString, FString TabBackgroundColorCSSString)
  • ThemeColorCSSString:主题默认使用的颜色(缺省值:#00c73c)。

  • TabBackgroundColorCSSString:标签菜单的背景颜色(缺省值:#44484e)。建议使用缺省值。

注意 CSS颜色值内不得输入alpha值。

  • 正确示例:#ff9800

  • 错误示例:#e2ff9800

下面是更改主题颜色的示例。

UCafeSdkBlueprintLibrary::SetThemeColor("#00c73c", "#44484e");

NAVER登录

在应用程序中使用“使用NAVER ID登录”功能。

  • NAVER登录功能使用的是NaverIdLoginBlueprintLibrary.h文件。

Init()方法

使用以下初始化信息对NAVER登录功能进行初始化。.

  • 在“使用NAVER ID登录开发人员中心”注册应用程序后获得的客户端ID。

  • 在“使用NAVER ID登录开发人员中心”注册应用程序后获得的客户端Secret。

下面是将NAVER登录功能初始化的示例。

    UNaverIdLoginBlueprintLibrary::Init("197CymaStozo7x5r2qR5", "evCgKH1kJL");

Login()方法

使用NAVER ID登录。

    UNaverIdLoginBlueprintLibrary::Login();

完成登录后发生的事件,通过如下委托进行处理。

    FCafeSDKPluginModule::OnLoggedIn.AddUObject(this,
            &ACafeSDKSampleProjectGameMode::OnCafeSdkLoggedIn);

    void ACafeSDKSampleProjectGameMode::OnCafeSdkLoggedIn(bool bSuccess) {
        // handle event.
    }

Logout()方法

用于退出登录。

    UNaverIdLoginBlueprintLibrary::Logout();

IsLogin()方法

确认是否为登录状态。

    UNaverIdLoginBlueprintLibrary::IsLogin();

GetProfile()方法

查询登录用户的基本信息(邮箱地址、昵称、头像、生日、年龄段)。

    UNaverIdLoginBlueprintLibrary::GetProfile();

要查询的信息通过注册委托设置。

    FCafeSDKPluginModule::OnGetProfile.AddUObject(this,
        &ACafeSDKSampleProjectGameMode::OnCafeSdkGetProfile);

    void ACafeSDKSampleProjectGameMode::OnCafeSdkGetProfile(const FString& JsonString) {
        // handle event.
    }

Last updated