PLUG UNREAL 適用ガイド

Quick Start

最新バージョンダウンロード

ダウンロードしたサンプルプロジェクトに含まれているPlugins/CafeSDKPluginフォルダをプロジェクトにコピーしてから、OSに応じて次のような開発環境を設定します。

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初期化(韓国語のみ対応 - NAVER Cafe)

韓国語のみ対応のPLUG SDKを初期化する時は、次のような初期化情報を設定します。

  • NAVER IDでログイン開発者センターにてアプリケーションを登録し、受け取ったクライアントID(ClientId)とクライアントシークレット(ClientSecret)

  • NAVER 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)

  • communityNo:コミュニティを開設して受け取ったコミュニティNo(communityNo)

  • loungeNo:ラウンジを開設して受け取ったラウンジNo(loungeNo)

if (FCafeSDKPluginModule::IsAvailable())
{
    /**
     * @param consumerKey       コンシューマーキー
     * @param consumerSecretKey コンシューマーシークレットキー  
     * @param communityNo       コミュニティナンバー
     * @param loungeNo          ラウンジナンバー                      
     */
     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 コールバックDelegate

コールバックDelegateを設定し、PLUG SDKで発生するユーザーイベントをコールバック関数で伝達します。

コールバックDelegateを通して呼び出されるメソッドで、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;

グローバルコミュニティと韓国内NAVER Cafeに対応するPLUGの初期化

グローバルコミュニティと韓国内NAVER Cafeの両方に対応する時は、グローバルコミュニティに対応するための初期化と、韓国内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を特定のタブが選択された状態で開始、または終了します。

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画面の左上の透明度調節スライダーで透明度を調節すると、ゲームとカフェを同時に使用できます。

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に移動するバナー画像は、カフェの管理メニューで登録します。

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 {
...
// 管理メニューで登録したApp SchemeをAppDelegateで処理します。
//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);

        //カフェ登録
        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);
}

カフェ登録リスナー

OnCafeSdkJoinedは、ゲームユーザーがPLUGでカフェに登録した時に発生するイベントを処理するコールバックリスナーです。

static FOnCafeSdkJoined OnCafeSdkJoined;

次の例は、カフェ登録リスナーを実装した例です。

// カフェ登録リスナー設定
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は、PLUGで動画録画が完了すると発生するイベントを処理するコールバックリスナーです。

static FOnCafeSdkRecordFinish OnCafeSdkRecordFinish;

次の例は、録画完了リスナーを実装した例です。

  /** 録画完了リスナー設定
   * 動画録画機能を使用するか決定します。
   *
   * @param uri 動画が録画されたファイルパスに対するURI
   */
void ACafeSDKSampleProjectGameMode::OnCafeSdkRecordFinish(const FString& FileUri)
{
    UCafeSdkBlueprintLibrary::StartVideoWrite(5, TEXT("subject"), TEXT("text"), FileUri);
}

ゲームIDの連携

ユーザーのゲームIDとCafe IDを連携して管理できます。連携したゲームIDとCafe IDのリストは、カフェの管理メニューから確認できます。

ゲーム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カラー値にアルファ値を入れてはいけません。

  • 正しい例: #ff9800

  • 間違った例: #e2ff9800

次の例は、テーマカラーを変更する例です。

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

NAVERログイン

アプリケーションで、NAVER IDでログイン機能を使用します。

  • NAVERログイン機能は、NaverIdLoginBlueprintLibrary.hファイルを使用します。

Init() メソッド

次の初期化情報で、NAVER機能を初期化します。

  • NAVER IDでログイン開発者センターにてアプリケーションを登録し、受け取ったクライアントID

  • NAVER IDでログイン開発者センターにてアプリケーションを登録し、受け取ったクライアントシークレット

次の例は、NAVERログイン機能を初期化した例です。

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

Login() メソッド

NAVER IDでログインします。

    UNaverIdLoginBlueprintLibrary::Login();

ログイン完了後、発生するイベントは次のようにDelegateで処理します。

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

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

Logout() メソッド

ログアウトします。

    UNaverIdLoginBlueprintLibrary::Logout();

IsLogin() メソッド

ログインした状態か確認します。

    UNaverIdLoginBlueprintLibrary::IsLogin();

GetProfile() メソッド

ログインしたユーザーの基本情報(メールアドレス、ニックネーム、プロフィール写真、誕生日、年齢層)を照会します。

    UNaverIdLoginBlueprintLibrary::GetProfile();

照会する情報は、Delegateを登録して設定します。

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

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

Last updated