2017. 10. 19. 12:22


안녕하세요. 게임개발자 놀이터 입니다.


네이버 플러그 분석 포스팅입니다.


분석 내용은 Plug Unity 을 보고 만들었습니다.


감사합니다.






네이버 플러그 IOS 추가 세팅





네이버 앱으로 로그인 가능하게 하기


네이버 앱으로 로그인 기능을 사용하기 위해선

NCSDKUnityManager.mm 을 열어서  

[[NCSDKLoginManager getSharedInstance] setIsNaverAppOauthEnable:YES];

을 추가 해줍니다.


 





또한, 네이버 앱으로 나갔다 들어오며 로그인이 완료 됬다는 델리 게이트를 받기 위해 

openURL 델리게이트를 오버라이드 받습니다.

유니티에서 한번에 처리 하기 위해 Plugin/IOS 에 AppDelegate을 서브클래스로 받는 클래스를 mm파일로 구현합니다

 



마지막으로 URL Schemes 세팅을 위해 유니티 – PlayerSetting – ios 에서 Supported URL schemes에 네이버 제휴 카페 ios 서비스에 등록한 URL schemes 값을 입력합니다.

 


이제 네이버 앱으로 로그인이 될것입니다.



PostBuild를 이용하여 XCode 추가 세팅 안하기.


네이버 SDK는 추가해야하는 라이브러리(프레임워크)나 세팅해줘야 하는 값들이 많습니다. 이를 한번에 처리 하기위해 아래와 같은 코드를 클래스를 만들어 Plugin에 추가 해줍니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
using System.IO;
using System.Collections.Generic;
 
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
using UnityEditor.Callbacks;
 
#if UNITY_IOS 
using UnityEditor.iOS.Xcode;
 
public static class IOSPostBuild
{
    [PostProcessBuild]
    public static void OnPostProcessBuild(BuildTarget target, string path)
    {
        #region Project.pbxproj
        {
            string pbxprojPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";
            
            PBXProject proj = new PBXProject();
            
            proj.ReadFromString(File.ReadAllText(pbxprojPath));
            
            string buildTarget = proj.TargetGuidByName(PBXProject.GetUnityTargetName());
            string destSdkDir = "Libraries/NCSDK";
            
            proj.AddFrameworkToProject(buildTarget, "ReplayKit.framework"false);
            proj.AddFrameworkToProject(buildTarget, "MobileCoreServices.framework"false);
            proj.AddFrameworkToProject(buildTarget, "SystemConfiguration.framework"false);
            proj.AddFrameworkToProject(buildTarget, "MediaPlayer.framework"false);
            proj.AddFrameworkToProject(buildTarget, "AVFoundation.framework"false);
            proj.AddFrameworkToProject(buildTarget, "CoreMedia.framework"false);
            proj.AddFrameworkToProject(buildTarget, "AssetsLibrary.framework"false);
            proj.AddFrameworkToProject(buildTarget, "Security.framework"false);
            proj.AddFrameworkToProject(buildTarget, "ImageIO.framework"false);
            proj.AddFrameworkToProject(buildTarget, "QuartzCore.framework"false);
            proj.AddFrameworkToProject(buildTarget, "WebKit.framework"false);
            proj.AddFrameworkToProject(buildTarget, "MediaToolBox.framework"false);
            
            
            proj.AddBuildProperty(buildTarget, "FRAMEWORK_SEARCH_PATHS""$(inherited)");
            proj.AddBuildProperty(buildTarget, "FRAMEWORK_SEARCH_PATHS""$(SRCROOT)/" + destSdkDir);
            proj.AddBuildProperty(buildTarget, "LIBRARY_SEARCH_PATHS""$(inherited)");
            proj.AddBuildProperty(buildTarget, "LIBRARY_SEARCH_PATHS""$(SRCROOT)/" + destSdkDir + "/NaverAuth");
            
            proj.AddBuildProperty(buildTarget, "OTHER_LDFLAGS""-ObjC");
            proj.AddBuildProperty(buildTarget, "OTHER_LDFLAGS""-all_load");
            
            File.WriteAllText(pbxprojPath, proj.WriteToString());
        }
        #endregion
 
        // Read plist
        var plistPath = Path.Combine(path, "Info.plist");
        var plist = new PlistDocument();
        plist.ReadFromFile(plistPath);
 
        // Update value
        PlistElementDict rootDict = plist.root;
        rootDict.SetString("Localization native development region""Korea");
        rootDict.SetString("Privacy - Photo Library Usage Description""게시글을 작성하기 위해 사용자의 사진에 접근합니다");
 
 
        // Write plist
        File.WriteAllText(plistPath, plist.WriteToString());
        //
 
    }
 
    private static void DirectoryCopy (string sourceDirName, string destDirName)
    {
        DirectoryInfo dir = new DirectoryInfo (sourceDirName);
        DirectoryInfo[] dirs = dir.GetDirectories ();
 
        if (!dir.Exists) {
            return;
        }
 
        if (!Directory.Exists (destDirName)) {
            Directory.CreateDirectory (destDirName);
        }
 
        FileInfo[] files = dir.GetFiles ();
 
        foreach (FileInfo file in files) {
            if(!file.Extension.ToLower().EndsWith("meta")) {
                string temppath = Path.Combine (destDirName, file.Name);
                file.CopyTo (temppath, false);
            }
        }
 
        foreach (DirectoryInfo subdir in dirs) {
            string temppath = Path.Combine (destDirName, subdir.Name);
            DirectoryCopy (subdir.FullName, temppath);
        }
    }
 
    public static void ClearDirectory (string path, bool deleteParent)
    {
        if (path != null) {
            string[] folders = Directory.GetDirectories (path);
 
            foreach (string folder in folders) {
                ClearDirectory (folder, true);
            }
 
            string[] files = Directory.GetFiles (path);
 
            foreach (string file in files) {
                File.Delete (file);
            }
 
            if (deleteParent) {
                Directory.Delete (path);
            }
        }
    }
 
    public static string PathWithPlatformDirSeparators (string path)
    {
        if (Path.DirectorySeparatorChar == '/') {
            return path.Replace ("\\", Path.DirectorySeparatorChar.ToString ());
        } else if (Path.DirectorySeparatorChar == '\\') {
            return path.Replace ("/", Path.DirectorySeparatorChar.ToString ());
        }
 
        return path;
    }
 
    public static string MacPath (string path)
    {
        return path.Replace (@"\", "/");
    }
}
#endif
#endif
cs







Posted by 시리시안
2017. 10. 16. 18:27


안녕하세요. 게임개발자 놀이터 입니다.


네이버 플러그 분석 포스팅입니다.


분석 내용은 Plug Unity 을 보고 만들었습니다.


감사합니다.



리소스 이미지 변경

네이버 카페 플러그 라이브러리에 포함된 리소스 이미지를 변경할 수 있습니다.


[Android]

Android 환경에서 네이버 카페 플러그 라이브러리에 포함된 리소스 이미지는 다음과 같이 변경할 수 있습니다.


네이버 카페 플러그 라이브러리 파일(.aar 파일)의 압축을 해제합니다.

압축을 해제한 폴더의 /res/drawable-xhdpi 폴더에 있는 이미지를 원하는 이미지로 바꿉니다.

압축을 해제한 폴더를 다시 라이브러리 파일(.aar 파일)로 압축합니다.

새로 압축한 네이버 카페 플러그 라이브러리를 적용해 프로젝트를 빌드합니다.


주의 ) 교체할 이미지는 원본 이미지와 사이즈가 같아야 합니다.


[IOS]

iOS 환경에서 네이버 카페 플러그 라이브러리에 포함된 리소스 이미지는 다음과 같이 변경할 수 있습니다.


NaverCafeSDK.bundle 패키지에 있는 이미지를 원하는 이미지로 바꿉니다.

수정한 패키지를 네이버 카페 플러그 라이브러리에 적용한 다음 프로젝트를 빌드합니다.

 






네이버 로그인

애플리케이션에서 네이버 아이디로 로그인 기능을 사용합니다

네이버 로그인은 GLinkNaverId.cs를 사용합니다.


init() 메서드


다음 초기화 정보로 네이버 로그인 기능을 초기화합니다.


네이버 아이디로 로그인 개발자 센터에 애플리케이션을 등록하고 받은 클라이언트 아이디

네이버 아이디로 로그인 개발자 센터에 애플리케이션을 등록하고 받은 클라이언트 시크릿


 


login() 메서드


네이버 아이디로 로그인합니다.

 



로그인이 완료 되면 리스너가 호출됩니다


[Android]

 



[IOS]

 




logout() 메서드


로그아웃합니다

 



isLogin() 메서드


로그인한 상태인지 확인한다.

 



getProfile() 메서드


로그인한 사용자의 기본 정보(메일 주소, 별명, 프로필 사진, 생일, 연령대)를 조회한다.

 



조회할 정보는 리스너를 등록해 설정합니다.


[Android]

 



[IOS]




감사합니다.




Posted by 시리시안
2017. 10. 16. 17:42

안녕하세요. 게임개발자 놀이터 입니다.


네이버 플러그 분석 포스팅입니다.


분석 내용은 Plug Unity 을 보고 만들었습니다.


감사합니다.




App Scheme 처리

게임에서 플러그의 홈 화면에 나오는 배너 이미지를 누르면 App Scheme으로 이동해 게임 기능을 실행하게 할 수 있습니다.

App Scheme으로 이동할 배너 이미지는 카페 관리 메뉴에서 등록 할 수 있습니다.


[Android]

Android 환경에서 App Scheme으로 이동하는 배너 이미지에 터치 이벤트가 일어났을 때 App Scheme을 처리하는 기능을 구현하려면 Android용 스크립트 파일인 GlinkAndroid.cs 파일에 다음과 같이 리스너를 설정합니다

 


또한 콜백 리스너도 등록해줍니다.

 




[IOS]

iOS 환경에서 App Scheme으로 이동하는 배너 이미지에 터치 이벤트가 일어났을 때 App Scheme을 처리하는 기능을 구현하려면 iOS용 스크립트 파일인 GLinkiOS.cs 파일에 다음과 같이 리스너를 설정한다.



감사합니다.


Posted by 시리시안
2017. 10. 16. 17:32

안녕하세요. 게임개발자 놀이터 입니다.


네이버 플러그 분석 포스팅입니다.


분석 내용은 Plug Unity 을 보고 만들었습니다.


감사합니다.




동영상 녹화


동영상 녹화 버튼을 누르면 게임중에 게임 화면을 녹화 할 수 있습니다.


녹화 시작과 종료

 


녹화 콜백 리스너

동영상 녹화시 발생하는 이벤트 처리는 콜백 리스너를 등록해 구현합니다.


녹화 기능은 GLinkRecord.cs 에 구현 되어 있습니다.


[Android]

 



[IOS]

 



녹화 완료 콜백 리스너

녹화가 완료 되었을때 처리할 작업은 콜백 리스너를 등록해 구현합니다.


[Android]

기본적으로 GLinkAndroid.cs 에 설정 되어 있지만, 그래도 코드를 본다면

에 있는 setOnRecordFinishListener 를 이용해 콜백 리스너를 등록합니다.


그후 등록한 리스너에 녹화 완료 기능을 구현 합니다.

 



[IOS]

IOS도 기본적으로 완성되어 있지만, 그래도 코드를 보자면

NCSDK / Plugins / IOS / NCSDKUnityManager.mm 을 열어서 보면

 





 


되어있는것을 화인 할 수 있다.


감사합니다



Posted by 시리시안
2017. 10. 16. 17:08

안녕하세요. 게임개발자 놀이터 입니다.


네이버 플러그 분석 포스팅입니다.


분석 내용은 Plug Unity 을 보고 만들었습니다.


감사합니다.




위젯



위젯 관련 기본 설정 함수들 입니다.


 

위젯 ) 화면 캡쳐

위젯의 화면 캡처 버튼을 누르면 게임 화면을 캡처할 수 있다.

화면 캡쳐 기능은 버튼 클릭 리스너를 등록해서 구현합니다.


화면 캡쳐 사용 여부 

 





[Android]

기본적으로 GLinkAndroid.cs 에 설정 되어 있지만, 그래도 코드를 본다면


먼저 리스너를 등록합니다.

 



그후 등록한 리스너에 스크린 캡쳐 기능을 구현 합니다.

 



[IOS]

IOS는 화면 캡쳐 리스너를 따로 구현해서 처리합니다.





감사합니다

 


Posted by 시리시안
2017. 10. 16. 16:46

안녕하세요. 게임개발자 놀이터 입니다.


네이버 플러그 분석 포스팅입니다.


분석 내용은 Plug Unity 을 보고 만들었습니다.


감사합니다.




플러그 투명도


플러그 좌 상단의 투명도 조절 바를 조절하면 게임과 카페를 동시에 사용 할 수 있습니다.

알파값 100% = 플러그로 터치 이벤트 전달

알파값 99% 이하 = 게임으로 터치 이벤트 전달


접기 버튼과 닫기 버튼

 



플러그 화면 우 상단에 버튼 2개가 있는데, 그중 왼쪽 1번 버튼이 접기 버튼입니다.

접기 버튼을 누르면 플러그 창이 내려가며, 위젯이 나타합니다. 다시 플러그를 실행하면, 마지막으로 보고 있던 화면이 나타 납니다.


오른쪽 2번 버튼은 닫기 버튼입니다.

닫기 버튼을 누르면 플러그가 종료됩니다. 접기와 달리 위젯이 나타나지 않으며, 다시 플러그를 실행하면 플러그의 첫 화면이 나타납니다.



Posted by 시리시안
2017. 10. 16. 16:22

안녕하세요. 게임개발자 놀이터 입니다.


네이버 플러그 분석 포스팅입니다.


분석 내용은 Plug Unity 을 보고 만들었습니다.


감사합니다.



가로 모드, 세로 모드 설정방법



[Android]

Android 환경에서는 별로 설정없이 자동으로 가로, 세로가 적용 됩니다.


[IOS]

NCSDK / Plugins / IOS / NCSDKUnityManager.mm 을 열어서 

 



을 모드에 맞춰서 다른 한쪽을 주석 처리 하면 됩니다.



감사합니다

Posted by 시리시안
2017. 10. 16. 16:15

안녕하세요. 게임개발자 놀이터 입니다.


네이버 플러그 분석 포스팅입니다.


분석 내용은 Plug Unity 을 보고 만들었습니다.


감사합니다.




본 내용은 사진 한장으로 설명이 가능합니다.



감사합니다.

Posted by 시리시안
2017. 10. 16. 15:45

안녕하세요. 게임개발자 놀이터 입니다.


네이버 플러그 분석 포스팅입니다.


분석 내용은 Plug Unity 을 보고 만들었습니다.


감사합니다.


NaverPlug SDK 분석 -02

 

1.    클래스 분석


IGLink , GLink : 플러그를 사용하기 위한 인터페이스 클래스

GLinkAndroid : Android용 플러그와 연동하기위한 클래스

GLinkIOS : IOS용 플러그와 연동하기 위한 클래스

GLinkConfig : 플러그 초기화를 위한 클래스

GLinkLanguage : 다국어 지원을 위한 언어 목록

GLinkNaverId : 네이버 아이디 로그인을 위한 클래스

GLinkRecord : 화면 녹화를 위한 클래스

GLinkStatistics : 결제모듈을 위한 클래스

 

  

2.    플러그 초기화

 

n   GLinkConfig.cs 파일에 초기화 정보를 설정한다

u  국내 네이버 카페만 지원할 경우

n   NaverLoginClientId : 네이버 개발자 센터에 애플리케이션을 등록하고 받은 클라이언트 아이디

n    NaverLoginClientSecret : 네이버 개발자 센터에 애플리케이션을 등록하고 받은 클라이언트 시크릿

n   CafeId : 네이버 카페를 개설하고 받은 카페 아이디

u   글로벌 커뮤니티를 대상으로 하는 다음 두 항목은 주석으로 처리한다

n    NeoIdConsumerKey : 커뮤니티를 개설하고 받은 컨슈머키

n    NGlobalCafeId : 커뮤니티를 개설하고 받은 커뮤니티 아이디

u   글로벌 커뮤니티 네이버 카페일 경우

n    위의 2개의 NeoIdConsumerKey, NGlobalCafeId 을 주석처리 하지 않고 알맞은 정보를 넣는다.


 

 

[Android]

l  글로벌 또는 국내 카페 상황에 맞춰서 코드를 주석 처리하거나 해제한다.


 

[IOS]

l  글로벌 또는 국내 카페 상황에 맞춰서 코드를 주석 처리하거나 해제한다.




Posted by 시리시안
2017. 10. 16. 12:16

안녕하세요. 게임개발자 놀이터 입니다.


오늘은 NaverPlug SDK Unity 이용한 Android / IOS 연동 방법 에 대해 포스팅 하려합니다~


그럼 바로 들어갑니다!





NaverPlug SDK Unity 이용한 Android / IOS 연동 방법

 

IOS 11 대응 하기 위해 2.52버전으로 다운로드 받습니다.

https://github.com/naver/cafe-sdk-unity

 



 

압축을 해제 , lib 안에 있는 Unitypackage 프로젝트 폴더에 풀어줍니다.

 

 


 

테스트를 위해 Sample 폴더에있는 NCSDK_Sample.Scene 열어봅니다.

 

 

빌드 해봅시다.

 

Anroid 경우, 아무 문제 없이 바로 빌드가 됩니다.

 

하지만IOS 경우빌드 세팅해야 부분이 있습니다.

 

 

IOS

l 세로 모드 설정

세로 모드로 진행하는 게임을 개발할 때는 NCSDK/Plugins/iOS 폴더에 있는 NCSDKUnityManager.mm 파일에서 NCSDKManager.setOrientationIsLandscape 속성을 NO 설정합니다.

 


 

1.  NCSDK/Plugins/IOS/NaverCafeSDK.bundle IOS에서 include 되도록 설정해줍니다.

 



 

(Two Column Layout 사용하고 있다면, 왼쪽 폴더 경로상에서 Bundle 선택하면 인스펙터에 정보가 나오지않습니다. 오른쪽 파일 창에서 클릭 해줘야 합니다. )

 

2.  NCSDK/Plugins/IOS/ NaverAuth/ NaverAuth.bundle 마찬가지로 IOS에서 include 되도록 설정 해줍니다.

 


 

3.  IOS 빌드해서 XCODE 열어 봅니다.

 


 

4.  빌드를 하면 엄청난 에러를 있습니다. 이제부터 에러들은 해결하기 위해 설정을 할것입니다.

 


 

5.  Build Settings Other Linker Flags –ObjC 추가합니다.

 


 

6.  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

Webkit.framework

ReplayKit.framework(라이브러리의 Status Optional 설정합니다)

 



 

7.  다시 한번 빌드하면 정상적으로 빌드가 되는 것을 확인 하실 있습니다.

 


Posted by 시리시안