프로그래밍/Unity3D
[Unity3D] 네이버플러그(NaverCafeSDK) IOS 추가 세팅 방법
시리시안
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 |