PLUG UNITY应用指南

应用指南

下载最新版本

1. 项目设置

如果要使用PLUG SDK,须按照以下步骤在Unity中设置开发环境。

  • 选择在Unity菜单下,点击Asset > Import package之后,在Custom Packag对话框中选择下载的NaverCafeSDK-x.x.x.unityPackage文件。

  • 在Custom Package对话框中点击Import,即生成NCSDK文件夹和Plugins文件夹。

  • 将NCSDK > Sample文件夹下的NCSDK.Prefabs拖拽到任意Scene下。这时,将生成Plug默认提供的按钮。

  • 在NCSDK > Scripts文件夹下的GLinkConfig文件中输入Cafe ID、客户端ID和客户端Secret。

//NCSDK/Scripts/GLinkConfig 
static class GLinkConfig
{
     public const string NaverLoginConsumerKey = "Consumer ID";
     public const string NaverLoginConsumerSecret = "Secret ID";
     public const int CafeId = 00000000;
}

为了开发便利,PLUG SDK运行按钮可使用PLUG SDK默认提供的按钮直接生成。SampleBehaviour.cs文件下有示例代码。 不同操作系统的PLUG SDK相关详细内容,请参考GitHub代码库。

2. 初始化

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

2.1 PLUG SDK初始化(仅支持韩语 - NAVER Cafe)

对仅支持韩语的PLUG SDK进行初始化时,需设置初始化信息后,在脚本文件下以注释形式处理与外语支持相关的项目。

在NCSDK > Scripts 文件夹下的GLinkConfig.cs文件中,设置如下初始化信息。

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

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

  • CafeId:在NAVER Cafe创建Cafe后获得的Cafe ID。

在NCSDK > Scripts文件夹下的不同操作系统脚本文件下,以注释形式处理与外语支持相关的项目。在Android版脚本文件GlinkAndroid.cs中,将以注释形式处理以下项目。

glinkClass.CallStatic ("initGlobal", currentActivity, GLinkConfig.ConsumerKey, GLinkConfig.ConsumerSecureKey, GLinkConfig.CommunityNo, GLinkConfig.LoungeNo);

在iOS版脚本文件GlinkiOS.cs中,将以注释形式处理以下项目

_InitGLinkForGlobal(GLinkConfig.ConsumerKey, GLinkConfig.ConsumerSecureKey, GLinkConfig.CommunityNo, GLinkConfig.LoungeNo);

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

对仅支持外语的PLUG SDK进行初始化时,需设置初始化信息后,在脚本文件下将处理为注释的与外语支持相关的项目作解除注释处理。

在NCSDK > Scripts文件夹下的GLinkConfig.cs文件中设置如下初始化信息。

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

  • CommunityId: 创建社区后获得的Community ID。

在NCSDK > Scripts文件夹下的不同操作系统脚本文件下,将处理为注释的与外语支持相关的项目作解除注释处理。

在Android版脚本文件GlinkAndroid.cs中,解除以下项目的注释。

glinkClass.CallStatic ("initGlobal", currentActivity, GLinkConfig.ConsumerKey, GLinkConfig.ConsumerSecureKey, GLinkConfig.CommunityNo, GLinkConfig.LoungeNo);

在iOS版脚本文件GlinkiOS.cs中,解除以下项目的注释。

_InitGLinkForGlobal(GLinkConfig.ConsumerKey, GLinkConfig.ConsumerSecureKey, GLinkConfig.CommunityNo, GLinkConfig.LoungeNo);

3. 启动PLUG SDK

GLink.cs文件是包含PLUG SDK控制方法的脚本文件。

GLink.cs 파일 GLink.cs 파일은 PLUG SDK를 제어하는 메서드가 있는 스크립트 파일입니다.

3.1 executeHome()方法

executeHome()是启动PLUG的方法。

GLink.sharedInstance().executeHome();

3.2 executeArticlePost()方法

executeArticlePost()是调出 发帖界面的方法。用参数传递贴文区ID。

GLink.sharedInstance().executeArticlePost("Content");

4. iOS追加设置

开发iOS游戏时,需要追加设置如下内容。

4.1 竖屏模式设置

开发竖屏游戏时,须在NCSDK/Plugins/iOS文件夹下的NCSDKUnityManager.mm文件中,将NCSDKManager.setOrientationIsLandscape的属性设置为NO。

- (void)setGLRootViewController {
_mainViewcontroller = UnityGetGLViewController();

[[NCSDKManager getSharedInstance] setParentViewController:_mainViewcontroller];
[[NCSDKManager getSharedInstance] setNcSDKDelegate:self];
[[NCSDKManager getSharedInstance] setOrientationIsLandscape:NO];
}

4.2 .bundle文件链接

在Unity 5.4.0f3以上版本导入iOS版本应用程序时,默认状态下未设置bundle文件的链接。为了将NaverAuth.bundle文件和NaverCafeSDK.bundle文件链接在一起,需按照如下方式在Select for plugin中选择iOS。

4.3 Xcode设置

在Xcode下设置如下开发环境。

  1. 在Build Settings的Other Linker Flags中添加-ObjC选项。

  2. 在Build Phases的Link Binary With Libraries中添加如下库。新增库的Status设置为Required。

  • MobileCoreServices.framework

  • SystemConfiguration.framework

  • MediaPlayer.framework

  • AVFoundation.framework

  • CoreMedia.framework

  • AssetsLibrary.framework

  • Security.framework

  • ImageIO.framework

  • QuartzCore.framework

  • ReplayKit.framework(Set library status to optional)

  • SafariServices.framework

  • Webkit.framework

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

对于同时支持国外社区和韩国国内NAVER Cafe的PLUG,在GLinkConfig.cs文件中设置如下初始化信息。

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

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

  • CafeId:在NAVER Cafe创建 Cafe后获得的Cafe ID。

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

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

static class GLinkConfig
{
	public const string NaverLoginClientId = "197CymaStozo7X5r2qR5";
	public const string NaverLoginClientSecret = "evCgKH1kJL";
	public const int CafeId = 28290504;
	
	public const string ConsumerKey = "PLUGTESTKEY";
	public const string ConsumerSecureKey = "PLUGTESTSECRET";
	public const int CommunityNo = 1;
	public const int LoungeNo = 58;
}

Android

为了对国外社区和韩国国内NAVERCafe信息进行初始化,在Android版脚本文件GlinkAndroid.cs中,解除以下项目的注释。

public GLinkAndroid () {
     ...
    glinkClass.CallStatic ("init", currentActivity, GLinkConfig.NaverLoginClientId, GLinkConfig.NaverLoginClientSecret, GLinkConfig.CafeId);
    glinkClass.CallStatic ("initGlobal", currentActivity, GLinkConfig.ConsumerKey, GLinkConfig.ConsumerSecureKey, GLinkConfig.CommunityNo, GLinkConfig.LoungeNo);
    ...
}

iOS

为了对国外社区和韩国国内NAVERCafe信息进行初始化,在iOS版脚本文件GlinkiOS.cs中,解除以下项目的注释。

public GLinkiOS () {
     ...
     _InitGLink(GLinkConfig.NaverLoginClientId, GLinkConfig.NaverLoginClientSecret, GLinkConfig.CafeId);
     _InitGLinkForGlobal(GLinkConfig.ConsumerKey, GLinkConfig.ConsumerSecureKey, GLinkConfig.CommunityNo, GLinkConfig.LoungeNo);
     ...
}

PLUG启动与退出

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

executeHome()方法

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

public void executeHome()

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

   /**
   * 以主页标签启动
   */
  Glink.sharedInstance().executeHome()

executeArticle()方法

以显示贴文区标签下特定贴文的状态启动PLUG。

public void executeArticle(int articleId)

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

   /**
   * 以读帖的状态启动
   */
  Glink.sharedInstance().startArticle(121);

横屏模式及竖屏模式

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

Android

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

iOS

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

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

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

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

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

透明度调节

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

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()方法设置是否显示微件。

void setShowWidgetWhenUnloadSDK(boolean useWidget)

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

下面是显示微件的示例。

  /**
   * 决定PLUG窗口收起时是否显示微件
   *
   * @param useWidget 确定是否显示微件的Boolean值
   */
  Glink.sharedInstance().setShowWidgetWhenUnloadSDK(true);

运行微件

如果要运行微件,使用startWidget()方法。

public static void startWidget()

下面是运行微件的示例。

  /**
   * 运行微件
   */
  Glink.sharedInstance().startWidget();

关闭微件

如果要关闭微件,则使用stopWidget()方法。

public static void stopWidget()

下面是强制关闭微件的示例。

  /**
   * 关闭微件
   */
  Glink.sharedInstance().stopWidget();

微件默认位置设置

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

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

void setWidgetStartPosition(bool isLeft, int heightPercentage)

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

    /**
    * 设置微件默认位置
    * isLeft:true时显示在左侧,false时显示在右侧。
    * heightPercentage:竖直方向的位置可使用百分数指定。
    **/

    GLink.sharedInstance().setWidgetStartPosition(false, 20);

截屏

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

截屏按钮

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

Android

如果是Android环境,在如下回调函数中注册微件截屏按钮点击监听器。

glinkClass.CallStatic ("setOnWidgetScreenshotClickListener", new OnWidgetScreenshotClickListener ());

下面是在Android版脚本文件GlinkAndroid.cs中实现截屏按钮点击监听器的示例。

class OnWidgetScreenshotClickListener : AndroidJavaProxy {
    public OnWidgetScreenshotClickListener () : base("com.naver.glink.android.sdk.Glink$OnWidgetScreenshotClickListener") { /* empty. */ }

    void onScreenshotClick() {
        string name = "CafeSdkController";

        GameObject obj = GameObject.Find (name);
        if (obj == null) {
            obj = new GameObject ("CafeSdkController");
            obj.AddComponent<SampleBehaviour> ();
        }

        SampleBehaviour behaviour = obj.GetComponent<SampleBehaviour> ();
        behaviour.OnClickScreenShotButton ();
    }
}

iOS

如果是iOS环境,按照下面的代码示例在iOS版脚本文件GlinkiOS.cs中实现截屏按钮点击监听器。

public void executeCaptureScreenshopAndPostArticle(string dummy) {
    // For iOS , For Widget
    // Game ScreenShot Code
    StartCoroutine (this.CoFunction ());
    Texture2D image = new Texture2D (Screen.width, Screen.height, TextureFormat.RGB24, false);
    image.ReadPixels (new Rect (0, 0, Screen.width, Screen.height), 0, 0, true);
    image.Apply ();

    byte[] bytes = image.EncodeToPNG();
    string path = Application.persistentDataPath + "/GLShareImage.png";
    File.WriteAllBytes(path, bytes);        

    GLink.sharedInstance().executeArticlePostWithImage(5, "", "", path);

}

截屏功能使用设置

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

void setUseWidgetScreenShot(bool useScreenShot);

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

下面是不使用截屏功能的示例。

    /**
    * 微件界面不显示截屏按钮
    **/

    GLink.sharedInstance().setUseWidgetScreenShot(false);

视频录制

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

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

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

使用微件视频录制功能

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

视频录制功能使用设置

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

public void setUseWidgetVideoRecord(bool useVideoRecord)

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

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

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

  /**
   * 决定是否使用视频录制功能
   *
   * @param useVideoRecord 确定是否使用视频录制功能的boolean值
   */
  GLink.sharedInstance().setUseWidgetVideoRecord(true)

录制结束回调监听器

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

Android

如果是Android环境,在如下回调函数中注册录制结束点击监听器。

glinkClass.CallStatic ("setOnRecordFinishListener", new OnRecordFinishListener ());

下面是在Android版脚本文件GlinkAndroid.cs中实现录制结束监听器的示例。

class OnRecordFinishListener : AndroidJavaProxy {
    public OnRecordFinishListener () : base("com.naver.glink.android.sdk.Glink$OnRecordFinishListener") { /* empty. */ }

    void onRecordFinished(String uri) {
        GLinkAndroid glink = (GLinkAndroid) GLink.sharedInstance ();
        glink.executeArticlePostWithVideo (-1, "", "", uri);
    }
}

iOS

如果是iOS环境,在ncSDKWidgetSuccessVideoRecord方法中注册录制结束监听器。

 (void)ncSDKWidgetSuccessVideoRecord;

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

...
[[NCSDKManager getSharedInstance] setNcSDKDelegate:self];
...
- (void)ncSDKWidgetSuccessVideoRecord {
    NSLog(@"视频录制结束");
}

使用游戏视频录制功能

游戏开发商可通过设置视频录制按钮支持游戏画面的录制。

视频录制开始与结束

如果要开始录制视频,使用startRecord()方法。

/*
开始录制视频
*/


GLinkRecord.sharedInstance().startRecord();

如果要结束录制视频,使用stoptRecord()方法。

/*
结束视频录制
*/

GLinkRecord.sharedInstance().stoptRecord();

视频录制回调监听器

利用游戏开发商的按钮录制视频时发生的事件,通过注册回调监听器进行处理。

Android

实现视频录制功能的脚本文件GLinkRecord.cs提供的Android版回调监听器如下。

class OnRecordManagerListener : AndroidJavaProxy {
    void onStartRecord() {
    // TODO: startRecord callback.
    showToast ("start record");
    }

    void onErrorRecord() {
    //TODO: record error callback.+
    showToast ("record error");
    }

    void onFinishRecord(string uri) {
    //TODO: record finish callback.+
    // GLinkAndroid glink = (GLinkAndroid) GLink.sharedInstance ();
    // glink.executeArticlePostWithVideo (uri);
    }
}

iOS

实现视频录制功能的脚本文件GLinkRecord.cs提供的iOS版回调监听器如下。

public class GLinkRecordiOS : IGLinkRecord {

    // 开始录制视频
    delegate void RecordStartDelegate();
    [MonoPInvokeCallback(typeof(RecordStartDelegate))]
    public static void _RecordStartCallback () {
        Debug.Log("Record Started.");
    }

    // 发生视频录制错误
    delegate void RecordErrorDelegate(string result);
    [MonoPInvokeCallback(typeof(RecordErrorDelegate))]
    public static void _RecordErrorCallback (string result) {
        Debug.Log("Record Error : " + result);
    }

       // 结束视频录制
    delegate void RecordFinishDelegate();
    [MonoPInvokeCallback(typeof(RecordFinishDelegate))]
    public static void _RecordFinishCallback () {
        Debug.Log("Record Finish.");
    }

    // 录制视频后关闭预览窗口
    delegate void RecordFinishWithPreviewDelegate();
    [MonoPInvokeCallback(typeof(RecordFinishWithPreviewDelegate))]
    public static void _RecordFinishWithPreviewCallback () {
        Debug.Log("Record Finish With Preview.");
    }
}

App Scheme处理

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

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

Android

如果想在Android环境下实现前往App Scheme的横幅图片点击事件发生时处理App Scheme的功能,需在Android版脚本文件GlinkAndroid.cs中设置如下监听器。

class OnClickAppSchemeBannerListener : AndroidJavaProxy {
    public OnClickAppSchemeBannerListener () : base("com.naver.glink.android.sdk.Glink$OnClickAppSchemeBannerListener") { /* empty. */ }

    void onClickAppSchemeBanner (string appScheme) {
        showToast ("tapped:" + appScheme);
    }
}

iOS

如果想在iOS环境下实现前往App Scheme的横幅图片点击事件发生时处理App Scheme的功能,需在iOS版脚本文件GlinkiOS.cs中设置如下监听器。

delegate void NCSDKAppSchemeBannerDelegate(string appScheme);
[MonoPInvokeCallback(typeof(NCSDKAppSchemeBannerDelegate))]
public static void _NCSDKAppSchemeBannerCallback (string appScheme) {
    Debug.Log("AppSceme : " + appScheme);
    _ShowMessageToast ("AppScheme" + appScheme);
}

游戏ID绑定

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

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

void syncGameUserId(string gameUserId)

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

  /**
   * 绑定游戏ID和Cafe ID
   *
   * @param gameUserId 游戏ID
   */
  GLink.sharedInstance().syncGameUserId("usergameid");

主题颜色变更

可变更PLUG的主题颜色。

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

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

void setThemeColor(string themeColorCSSString, string backgroundCSSString);
  • themeColorCSSString:主题默认使用的颜色(缺省值:#00c73c)

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

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

  • 正确示例:#ff9800

  • 错误示例:#e2ff9800

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

GLink.sharedInstance().setThemeColor("#00c73c", "#44484e");

资源图片变更

PLUG支持更改包含于NAVER Cafe PLUG库中的资源图片。

Android

在Android环境下,可按照如下方式更改包含于NAVER Cafe PLUG库中的资源图片。

  1. 解压NAVER Cafe PLUG 库文件(.aar文件)。

  2. 将解压后文件夹下/res/drawable-xhdpi文件夹中的图片更改为目标图片。

  3. 将解压后的文件夹重新压缩为库文件(.aar文件)

  4. 应用新压缩的NAVER Cafe PLUG库并导入项目。

注意 更改图片时,图片大小须和原图片大小一致。

iOS

在iOS环境下,可按照如下方式更改包含于NAVER Cafe PLUG库中的资源图片。

  1. 将NaverCafeSDK.bundle压缩包中的图片更改为目标图片。

  2. 将修改后的压缩包应用至NAVER Cafe PLUG库中后导入项目。

注意 更改图片时,图片大小须和原图片大小一致。

NAVER登录

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

  • “NAVER 登录”功能使用的是GLinkNaverId.cs文件。

init()方法

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

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

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

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

    GLinkNaverId.sharedInstance().init("197CymaStozo7x5r2qR5", "evCgKH1kJL");

login()方法

使用NAVER ID登录。

    GLinkNaverId.sharedInstance().login();

登录完成后,调用监听器。

Android

下面是在Android环境下完成登录后调用的监听器示例。

class OnLoggedInListener : AndroidJavaProxy {
        public OnLoggedInListener () : base("com.naver.glink.android.sdk.Glink$OnLoggedInListener") { /* empty. */ }

        void onLoggedIn (bool success) {
            // TODO: login callback.
        }
    }

iOS

下面是在iOS环境下完成登录后调用的监听器示例。

public static void _NaverIdGetProfileCallback (string result) {
        Debug.Log(" result : " + result);
    }

logout() 方法

用于退出登录。

    GLinkNaverId.sharedInstance().logout();

isLogin() 方法

确认是否为登录状态。

    BOOL isLogin = GLinkNaverId.sharedInstance().isLogin();

getProfile() 方法

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

    GLinkNaverId.sharedInstance().getProfile();

要查询的信息通过注册监听器设置。

Android

下面是在Android环境下查询用户基本信息的监听器示例。

    class OnGetProfileListener : AndroidJavaProxy {
        public OnGetProfileListener () : base("com.naver.glink.android.sdk.NaverIdLogin$OnGetProfileListener") { /* empty. */ }

        void onResult(string jsonString) {
            // TODO: get profile callback.
        }
    }

iOS

下面是在iOS环境下查询用户基本信息的监听器示例。

public static void _NaverIdLoginCallback () {
        Debug.Log("Naver Login Success");
    }

Last updated