UNITY

Quick Start

์ตœ์‹  ๋ฒ„์ „ ๋‹ค์šด๋กœ๋“œ

1. ํ”„๋กœ์ ํŠธ ์„ค์ •

NaverGame SDK๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Unity์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • Unity์˜ ๋ฉ”๋‰ด์—์„œ Asset > Import package๋ฅผ ํด๋ฆญํ•œ ๋‹ค์Œ Custom Package ๋Œ€ํ™” ์ƒ์ž์—์„œ ๋‹ค์šด๋กœ๋“œํ•œ NaverGameSDK-x.x.x.unityPackage ํŒŒ์ผ์„ ์„ ํƒํ•œ๋‹ค.

  • Unity์˜ ๋ฉ”๋‰ด์—์„œ Asset > Import package๋ฅผ ํด๋ฆญํ•œ ๋‹ค์Œ Custom Package ๋Œ€ํ™” ์ƒ์ž์—์„œ ๋‹ค์šด๋กœ๋“œํ•œ NaverGameSDK-x.x.x.unityPackage ํŒŒ์ผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  • import ์—์ œ
  • Custom Package ๋Œ€ํ™” ์ƒ์ž์—์„œ Import๋ฅผ ํด๋ฆญํ•˜๋ฉด NGSDK ํด๋”์™€ Plugins ํด๋”๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  • NGSDKํด๋”์˜ Sample ํด๋”์— ์žˆ๋Š” SampleScene ํŒŒ์ผ์—๋Š” ๊ธฐ๋ณธ์‹คํ–‰ ๋ฒ„ํŠผ์ด ํฌํ•จ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. Unity ๋ฒ„์ „์ด ์ƒ์ดํ•  ๊ฒฝ์šฐ SampleScene์ด ์ •์ƒ์ ์œผ๋กœ ๋กœ๋”ฉ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋‹ค์Œ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์ƒˆ๋กœ์šด UI๋ฅผ ๊ตฌ์„ฑํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Canvas์— ๋ฒ„ํŠผ ์ƒ์„ฑํ•˜๊ธฐ

  • GameObject > UI > Canvas ๋ฅผ ํด๋ฆญํ•˜์—ฌ UGUI Canvas ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • NGSDK ํด๋”์˜ Sample ํด๋”์— ์žˆ๋Š” SampleButton.Prefab๋ฅผ ์ƒ์„ฑ๋œ Canvas์˜ ํ•˜์œ„๋กœ ๋Œ์–ด๋‹ค ๋†“์Šต๋‹ˆ๋‹ค. NaverGameSDK์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋ฒ„ํŠผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  • NaverGame SDK ์‹คํ–‰ ๋ฒ„ํŠผ์€ ๊ฐœ๋ฐœ ํŽธ์˜๋ฅผ ์œ„ํ•ด NaverGame SDK๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋ฒ„ํŠผ์œผ๋กœ ์ง์ ‘ ์ƒ์„ฑํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค. SampleBehaviour.cs ํŒŒ์ผ์— ์ƒ˜ํ”Œ ์ฝ”๋“œ๊ฐ€ ์ž‘์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • NaverGame SDK ์˜ ์‹คํ–‰๋ฒ„ํŠผ์€ ์œ ๋‹ˆํ‹ฐ์˜ UGUI๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. UGUI๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์—๋„ SampleBehaviour.cs ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์—ฌ ์‚ฌ์šฉํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šด์˜์ฒด์ œ๋ณ„ NaverGame SDK์— ๊ด€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub ์ €์žฅ์†Œ๋ฅผ ์ฐธ๊ณ ํ•ฉ๋‹ˆ๋‹ค.

2. Android ์ถ”๊ฐ€ ์„ค์ •

GooglePlayStore ์ •์ฑ… (https://developer.android.com/google/play/requirements/target-sdk?hl=ko) ์— ๋”ฐ๋ผ 2024๋…„ 8์›”๋ถ€ํ„ฐ targetSDK 34์ด ๊ฐ•์ œ๋˜๋ฉฐ ๋„ค์ด๋ฒ„๊ฒŒ์ž„ SDK ๋Š” Android 14 (API ์ˆ˜์ค€ 34) ์ด์ƒ์„ ์›ํ™œํžˆ ์ง€์›ํ•˜๋ ค๋ฉด Unity 2022.2 ์ดํ›„ ๋ฒ„์ „์„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2-0 minSdkVersion ์„ค์ •

minSdkVersion ์€ 21 ์ด์ƒ์„ ์„ค์ •ํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•˜์—ฌ minSdkVersion์„ 19๋กœ ์„ค์ •ํ•˜์˜€์ง€๋งŒ OkHttp 3.14.7 ๋ฒ„์ „์˜ targetSdk30 ์ด์Šˆ(https://github.com/square/okhttp/issues/5162)๋กœ ์ธํ•ด 21 ๋ฒ„์ „ ์ด์ƒ์„ ์‚ฌ์šฉ ํ•˜์…”์•ผ ํ•˜๋ฉฐ, 21 ๋ฏธ๋งŒ ์ง€์›์„ ์œ„ํ•ด์„œ๋Š” ๋ณ„๋„์˜ ์„ค์ •์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๊ณ  Gradle ๋นŒ๋“œ์—์„œ๋งŒ ์ง€์› ํ•ฉ๋‹ˆ๋‹ค.

21 ๋ฏธ๋งŒ ๋ฒ„์ „์„ ์œ„ํ•œ ์„ค์ •์€ Android ๊ฐ€์ด๋“œ์˜ ํ•ด๋‹น ๋งํฌ๋ฅผ ์ฐธ์กฐํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

2-2. Unity 2019 ์ดํ•˜ ๋ฒ„์ „์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

NaverGameSDK 1.3.2 ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถฉ๋Œ (duplicate class) ์ด์Šˆ๋ฅผ ํšŒํ”ผํ•˜๊ธฐ ์œ„ํ•˜์—ฌ Unity 2020 ๋ฒ„์ „๋ถ€ํ„ฐ ์ง€์›ํ•˜๋Š” [Android ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ”„๋กœ์ ํŠธ] ๋ฐฉ์‹์œผ๋กœ ์ œ๊ณต๋˜๋ฉฐ unityproject ํŒŒ์ผ์„ ์ž„ํฌํŠธ์‹œ ์ž๋™์œผ๋กœ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ „ ๋ฐฉ์‹์œผ๋กœ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜๋ฅผ ์›ํ•˜์‹œ๋Š” ๊ฒฝ์šฐ ๋ณ„๋„ ๊ฐ€์ด๋“œ ๋ฅผ ์ฐธ์กฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์œ ๋‹ˆํ‹ฐ ์—์„œ๋Š” 2019 ๋ฒ„์ „๋ถ€ํ„ฐ ์ง€์›๋œ๋‹ค๊ณ  ๊ฐ€์ด๋“œ ํ•˜๊ณ  ์žˆ์œผ๋‚˜ ๋‚ด๋ถ€ ํ…Œ์ŠคํŠธ์‹œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฌธ์ œ์ ์ด ๋ฐœ๊ฒฌ๋˜์–ด 2022.3.13f ๋ฒ„์ „์„ ๊ธฐ์ค€์œผ๋กœ ํ…Œ์ŠคํŠธ ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Unity 2019 ์ดํ•˜ ๋ฒ„์ „์— ๋Œ€ํ•œ ์„ค์ •์€ ๋ณ„๋„ ๊ฐ€์ด๋“œ ์—์„œ ๋‹น๋ถ„๊ฐ„ ์ œ๊ณต๋˜์ง€๋งŒ ๋นŒ๋“œ์—๋Ÿฌ์— ๋Œ€ํ•œ ๊ธฐ์ˆ ์  ์ง€์›์€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

2-3. Unity 2022.2 ์ดํ›„ ๋ฒ„์ „์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

Android targetsdk 34 ์„ค์ •์‹œ AGP(Android Gradle Plugin) 7.0 ์ด์ƒ์˜ ์‚ฌ์šฉ์ด ์š”๊ตฌ๋˜๋ฉฐ, Unity 2022.2 ์ดํ›„๋ฒ„์ „๋ถ€ํ„ฐ AGP 7.0.0 ๋ฒ„์ „์„ ๊ณต์‹์ ์œผ๋กœ ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์›ํ™œํ•œ ๋นŒ๋“œ๋ฅผ ์œ„ํ•˜์—ฌ 2022.2 ์ดํ›„ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

2-4. Gradle ๋นŒ๋“œ ์„ค์ •

Project Settings > Player Settings > Android > Publishing Settings ๋ฅผ ์—ด์–ด Custom Gradle Properties Template ์™€ Custom Main Manifest ๋ฅผ ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค.

Custom Grale Build ์„ค์ •

Assets/Plugins/Android/gradleTemplate.properties ํ•ญ๋ชฉ์„ ์—ด์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด android.useAndroidX, android.enableJetifierํ•ญ๋ชฉ์„ true ๋กœ ์ถ”๊ฐ€ ํ•ด์ค๋‹ˆ๋‹ค.

android.useAndroidX = true
android.enableJetifier=true
**ADDITIONAL_PROPERTIES**

Assets/Plugins/Android/AndroidManifest.xml ํ•ญ๋ชฉ์„ ์—ด์–ด <activity> ํ•ญ๋ชฉ์— android:exported = "true" ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.unity3d.player"
    xmlns:tools="http://schemas.android.com/tools">
    <application>
        <activity android:name="com.unity3d.player.UnityPlayerActivity"
                  android:theme="@style/UnityThemeSelector" android:exported = "true" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>
    </application>
</manifest>

NaverGameSDK Android ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ”„๋กœ์ ํŠธ์˜ targetSDK ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด NGSDK>Plugins>Android>navergamesdk.androidlib>build.gradle ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์—ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์ •์„ ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2-5. Minify ์„ค์ •

Release ๋นŒ๋“œ๋ฅผ ์œ„ํ•œ Minify(proguard) ์„ค์ •์„ ํ•ฉ๋‹ˆ๋‹ค

  • Build Settings > Player Settings > AndroidTab > Publishing Settings > Custom Proguard File ์„ค์ •์„ ์ฒดํฌํ•˜์—ฌ ์ƒˆ๋กœ์šด proguard-user.txt ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • Build Settings > Player Settings > AndroidTab > Publishing Settings > Minify ์—์„œ Release๋ฅผ ํ™œ์„ฑํ™” ํ•ฉ๋‹ˆ๋‹ค.

  • proguard-user.txt ํŒŒ์ผ์„ ์—ด๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”„๋กœ๊ฐ€๋“œ ์„ค์ •์„ ์ถ”๊ฐ€ ํ•ฉ๋‹ˆ๋‹ค


#retrofit 2

# Retrofit does reflection on generic parameters. InnerClasses is required to use Signature and
# EnclosingMethod is required to use InnerClasses.
-keepattributes Signature, InnerClasses, EnclosingMethod

# Retrofit does reflection on method and parameter annotations.
-keepattributes RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations

# Retain service method parameters when optimizing.
-keepclassmembers,allowshrinking,allowobfuscation interface * {
    @retrofit2.http.* <methods>;
}

# Ignore annotation used for build tooling.
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement

# Ignore JSR 305 annotations for embedding nullability information.
-dontwarn javax.annotation.**

# Guarded by a NoClassDefFoundError try/catch and only used when on the classpath.
-dontwarn kotlin.Unit

# Top-level functions that can only be used by Kotlin.
-dontwarn retrofit2.KotlinExtensions


#end of retrofit2

#gson
##---------------Begin: proguard configuration for Gson  ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature

# For using GSON @Expose annotation
-keepattributes *Annotation*

# Gson specific classes
-dontwarn sun.misc.**
#-keep class com.google.gson.stream.** { *; }



# Prevent proguard from stripping interface information from TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer

##---------------End: proguard configuration for Gson  ----------
#end of gson

#glide
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
  **[] $VALUES;
  public *;
}
#end of glide

#kotlin
-keep class kotlin.** { *; }
-keep class kotlin.Metadata { *; }
-dontwarn kotlin.**
-keepclassmembers class **$WhenMappings {
    <fields>;
}
-keepclassmembers class kotlin.Metadata {
    public <fields>;
    public <methods>;
}
#End of kotlin


#navergame sdk
# Application classes that will be serialized/deserialized over Gson
-keep class com.navercorp.nng.android.sdk.api.Host** { *; }
-keep class com.navercorp.nng.android.sdk.api.service** { *; }
-keep class com.navercorp.nng.android.sdk.api.entity** { *; }

-keep class com.navercorp.nng.android.sdk.NngNdkWrapper** { *; }
-keepclassmembers class com.navercorp.nng.android.sdk.NngNdkWrapper { *; }

-keep class com.navercorp.nng.android.sdk.NNGLink** { *; }
-keep class com.navercorp.nng.android.sdk.NNGLink$Companion { *; }
-keepclassmembers class com.navercorp.nng.android.sdk.NNGLink {
    public static ** Companion;
}
-keep public interface com.navercorp.nng.android.sdk.NNGCallbackListener {*;}
-keep class com.navercorp.nng.android.sdk.NNGConfig** { *; }


#end of sdk

3. iOS ์ถ”๊ฐ€์„ค์ •

๋„ค์ด๋ฒ„ ๊ฒŒ์ž„ iOS SDK๋Š” iOS 12.0 ๋ฒ„์ „๋ถ€ํ„ฐ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

iOS์šฉ ๊ฒŒ์ž„์„ ๊ฐœ๋ฐœํ•  ๋•Œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‚ฌํ•ญ์„ ์ถ”๊ฐ€๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

3-1 .bundle ํŒŒ์ผ ๋งํฌ

Unity 5.4.0f3 ๋ฒ„์ „ ์ด์ƒ์—์„œ๋Š” iOS์šฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œํ•  ๋•Œ .bundle ํŒŒ์ผ์ด ๋งํฌ๋˜์ง€ ์•Š๋„๋ก ์„ค์ •๋ผ ์žˆ์Šต๋‹ˆ๋‹ค. NNGSDK.bundle ํŒŒ์ผ์„ ๋งํฌํ•˜๋„๋ก ๋‹ค์Œ๊ณผ ๊ฐ™์ด Select for platforms for plugin์—์„œ iOS๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

3-2. Xcode ์„ค์ •

Xcode์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • TARGETS ํ•ญ๋ชฉ ์ค‘ ํ”„๋ ˆ์ž„ ์›Œํฌ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  • Build Setting ํƒญ์„ ์„ ํƒํ•˜๊ณ  Linking ํ•ญ๋ชฉ์—์„œ Other Linker Flags๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

    • Basic ๋˜๋Š” Customized๋ชจ๋“œ ์ธ ๊ฒฝ์šฐ Other Linker Flag๊ฐ€ ๋ณด์ด์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.์ด ๊ฒฝ์šฐ All ๋ชจ๋“œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    • ์šฐ์ƒ๋‹จ์— ์œ„์น˜ํ•œ ๊ฒ€์ƒ‰์ฐฝ์— Other Linker Flag๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Other Linker Flags์— -ObjC ์˜ต์…˜๊ณผ -lc++ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  • Info.plist์— ์•„๋ž˜์˜ ์‚ฌ์šฉ์ž ๊ถŒํ•œ ํš๋“ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    • Privacy - Camera Usage Description

    • Privacy - Photo Library Usage Description

  • TARGETS ํ•ญ๋ชฉ ์ค‘ ์‹คํ–‰๋  ์•ฑ์„ ์„ ํƒํ•˜๊ณ  Infoํƒญ์˜ URL Types ํ•ญ๋ชฉ์— Identifier ๊ฐ’๊ณผ URL Schemes๊ฐ’์„์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  • Identifier ๊ฐ’์€ ํ•ด๋‹น TARGET์˜ General ํƒญ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • URL Schemes ๊ฐ’์—๋Š” ๋„ค์ด๋ฒ„ ์•„์ด๋””๋กœ ๋กœ๊ทธ์ธ ๊ฐœ๋ฐœ์ž ์„ผํ„ฐ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋“ฑ๋กํ•  ๋•Œ ์ž…๋ ฅํ•œ URL Scheme ๊ฐ’์„์ž…๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • (1.3.6 ๋ฒ„์ „ ์ดํ•˜) Build Phases -> Link Binary With Libraries ์— SafariServices.framework ์™€ NaverLogin.framework ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  • (1.3.6 ๋ฒ„์ „ ์ด์ƒ) General -> Framework and Libraries ์— SafariServices.framework ์™€NaverThirdPartyLogin.framework ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. NaverThirdPartyLogin.framework ์˜ Embed ์„ค์ •์€ Embed&Sign ์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • (1.3.7 ๋ฒ„์ „ ์ด์ƒ) NaverThirdPartyLogin.xcframework ์„ UnityFramework ํƒ€๊ฒŸ์ด ์•„๋‹Œ Unity -> Xcode ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ์ดํ›„ Unity-iPhone ํƒ€๊ฒŸ์œผ๋กœ ๋งํฌํ•ด ์ค๋‹ˆ๋‹ค. NaverThirdPartyLogin.xcframework ํŒŒ์ผ์€ navergame-sdk-unity/package/iOS/external-lib/NaverLogin/NaverThirdPartyLogin.xcframework ์œผ๋กœ ์‚ฌ์šฉ ํ•ฉ๋‹ˆ๋‹ค.

NaverGameSDK ์‚ฌ์šฉ

NaverGameSDK๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋จผ์ € init ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

init() ๋ฉ”์„œ๋“œ

init() ๋ฉ”์„œ๋“œ๋Š” NaverGameSDK ์„ ์…‹ํŒ…ํ•˜๋Š” ๋ฉ”์„œ๋“œ ์ž…๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ์ธ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

public void init(string loungeId, string clientId, string clientSecret);

๋‹ค์Œ์€ init() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

GLink.sharedInstance().init(
    "naver_game_4developer", 
    "UKvNABLDsyEJusJGsXL2",
    "rK4suc_Qd0"
    );

terminateSdk() ๋ฉ”์„œ๋“œ

terminateSdk() ๋ฉ”์„œ๋“œ๋Š” NaverGameSDK ๋ฅผ ์ข…๋ฃŒ์‹œํ‚ค๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. ํŠน์ • ์ƒํ™ฉ์—์„œ sdk ๋ฅผ ์ข…๋ฃŒ์‹œ์ผœ์•ผ ํ• ๋•Œ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด GLinkDelegate ์ฝœ๋ฐฑ์„ ํ†ตํ•ด์„œ ์ „๋‹ฌ๋˜๋Š” ์ธ๊ฒŒ์ž„๋ฉ”๋‰ด์ฝ”๋“œ ๋ฅผ ์‹คํ–‰ํ• ๋•Œ์—๋Š” ๋ฐ˜๋“œ์‹œ terminateSdk() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ sdk๋ฅผ ๋‹ซ์•„์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

void terminateSdk();

๋‹ค์Œ์€ terminateSdk() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

Glink.sharedInstance().terminateSdk()

executeHomeBanner() ๋ฉ”์„œ๋“œ

๋“ฑ๋กํ•œ ๋ฐฐ๋„ˆ์ฐฝ์„ ๋„์šฐ๋Š” ๋ฉ”์„œ๋“œ ์ž…๋‹ˆ๋‹ค.

public void executeHomeBanner()

๋‹ค์Œ์€ executeHomeBanner() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

Glink.sharedInstance().executeHomeBanner()

executeSorryBanner() ๋ฉ”์„œ๋“œ

์ ๊ฒ€์šฉ ๋˜๋Š” ํŠน์ • ๊ณต์ง€์‚ฌํ•ญ ํŽ˜์ด์ง€๋ฅผ ๋„์šด๋‹ค. ์ด ํŽ˜์ด์ง€์—์„œ๋Š” ๋‹ค๋ฅธ ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•˜๋Š”๊ฒƒ์ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค

public void executeSorryBanner()

๋‹ค์Œ์€ executeSorryBanner() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

Glink.sharedInstance().executeSorryBanner();

executeBoard(int boardId) ๋ฉ”์„œ๋“œ

ํŠน์ • ๊ฒŒ์‹œํŒ์„ ๋ฐ”๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฉ”์„œ๋“œ ์ž…๋‹ˆ๋‹ค. boardId ๋Š” ์›น์—์„œ ๊ฒŒ์‹œํŒ ์ ‘์† ์‹œ ๋ณด์ด๋Š” https://game.naver.com/lounge/{loungeId}/board/{boardId} ํ˜•ํƒœ์˜ URL์—์„œ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

public void executeBoard(int boardId);

๋‹ค์Œ์€ executeBoard() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

Glink.sharedInstance().executeBoard(1);

executeFeed(long feedId, bool isTempFeedId) ๋ฉ”์„œ๋“œ

๋“ฑ๋ก๋œ ๊ธ€์˜ ๋ฒˆํ˜ธ๋กœ ๋ฐ”๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฉ”์„œ๋“œ ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์˜ˆ์•ฝ๋…ธ์ถœ์„ ํ†ตํ•ด์„œ ๋“ฑ๋กํ•œ ์˜ˆ์•ฝ ๊ฒŒ์‹œ๊ธ€์˜ ๊ฒฝ์šฐ์—๋Š” ์˜ˆ์•ฝ๊ธ€์˜ ๋ฒˆํ˜ธ๋ฅผ feedId ์— ์ž…๋ ฅํ•˜๊ณ  IsTempFeedId ๋ฅผ true ๋กœ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์•ฝ๊ธ€์ด ๊ฒŒ์‹œ๋˜๊ธฐ ์ „์—๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋”๋ผ๋„ ๊ธ€์ด ๋…ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • feedId: ๊ฒŒ์‹œ๊ธ€ ๋˜๋Š” ์˜ˆ์•ฝ๊ฒŒ์‹œ๊ธ€์˜ ๋ฒˆํ˜ธ

  • isTempFeedId: FeedId ๊ฐ€ ๊ฒŒ์‹œ๊ธ€ ์ธ ๊ฒฝ์šฐ false, feedId๊ฐ€ ์˜ˆ์•ฝ๊ฒŒ์‹œ๊ธ€ ์ธ ๊ฒฝ์šฐ true

void executeFeed(long feedId, bool isTempFeedId);

๋‹ค์Œ์€ executeFeed() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

Glink.sharedInstance().executeFeed(50154, true);

executeFeedWriting(int boardId, string title, string text, string imageFilePath) ๋ฉ”์„œ๋“œ

๊ธ€์“ฐ๊ธฐ ํ™”๋ฉด์„ ์‹คํ–‰ํ•˜๋Š” ๋ฉ”์„œ๋“œ ์ž…๋‹ˆ๋‹ค. boardId๋Š” ๊ฒŒ์‹œํŒ๋ฒˆํ˜ธ, title์€ ๊ธ€์˜ ์ œ๋ชฉ, text๋Š” ๊ธ€์˜ ๋‚ด์šฉ, imageFilePath๋Š” ์ฒจ๋ถ€ ์ด๋ฏธ์ง€์˜ ๊ฒฝ๋กœ์ด๋ฉฐ ์ด๋ฏธ์ง€๋Š” ํ•œ ๊ฐœ๋งŒ ์ฒจ๋ถ€๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ํ•„์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฉฐ ์ž…๋ ฅ๋˜๋Š” ๊ฒฝ์šฐ ๊ธ€ ์“ฐ๊ธฐ ํ™”๋ฉด์— ๋ฏธ๋ฆฌ ์„ธํŒ…๋ฉ๋‹ˆ๋‹ค.

  • boardId: ๊ฒŒ์‹œํŒ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค. ์›น์—์„œ ๊ฒŒ์‹œํŒ ์ ‘์† ์‹œ ๋ณด์ด๋Š” https://game.naver.com/lounge/{loungeId}/board/{boardId} ํ˜•ํƒœ์˜ URL์—์„œ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • title: ๊ธ€์˜ ์ œ๋ชฉ์ž…๋‹ˆ๋‹ค.

  • text: ๋ณธ๋ฌธ์— ์ถ”๊ฐ€๋  ๋ฌธ์ž์—ด ์ž…๋‹ˆ๋‹ค.

  • imageFilePath: ์ฒจ๋ถ€๋  ์ด๋ฏธ์ง€์˜ LocalPath ์ž…๋‹ˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ์˜ ๊ฒฝ์šฐ ์‚ฌ์ง„ ๊ถŒํ™˜ ํš๋“์˜ ์ ˆ์ฐจ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ํ•ด๋‹น ๊ฐ’์„ ์ง์ ‘ ์ž…๋ ฅํ•  ์‹œ ๋™์ž‘์—ฌ๋ถ€๋ฅผ ๊ผผ๊ผผํžˆ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

void executeFeedWriting(
int boardId, String text, String text, String imageFilePath);

๋‹ค์Œ์€ executeFeedWriting() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

  Glink.sharedInstance().executeFeedWriting(54,"์ œ๋ชฉ ํ…Œ์ŠคํŠธ","๋ณธ๋ฌธํ…Œ์ŠคํŠธ",
  "content://com.example.contentprovidersample.provider/cheeses")

setCanWriteFeedByScreenshot(bool enabled) ๋ฉ”์„œ๋“œ

์œ ์ €๊ฐ€ ์Šคํฌ๋ฆฐ์ƒท์„ ์บก์ณํ–ˆ์„๋•Œ ์ด๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ๊ธ€์“ฐ๊ธฐ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฒ„ํŠผ์„ ๋„์šฐ๋Š” ๊ฒƒ์„ ์„ค์ •ํ•˜๋Š” ๋ฉ”์„œ๋“œ ์ž…๋‹ˆ๋‹ค. ๋ฏธํ˜ธ์ถœ์‹œ ๊ธฐ๋ณธ๊ฐ’์€ ON(true) ์ž…๋‹ˆ๋‹ค.

  • enabled: true ์ด๋ฉด ์Šคํฌ๋ฆฐ์ƒท์„ ์บก์ณํ–ˆ์„๋•Œ ๊ธ€์“ฐ๊ธฐ ๋ฒ„ํŠผ์„ ๋„์›๋‹ˆ๋‹ค.

void setCanWriteFeedByScreenshot(bool enable);

๋‹ค์Œ์€ setCanWriteFeedByScreenshot() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

  Glink.sharedInstance().setCanWriteFeedByScreenshot(true)

setGameId(string gameId) ๋ฉ”์„œ๋“œ

๋„ค์ด๋ฒ„๋กœ๊ทธ์ธ๊ณผ ์—ฐ๋™๋˜์–ด ํ•ด๋‹น์œ ์ €์™€ ๋„ค์ด๋ฒ„์•„์ด๋””๋ฅผ ๋งค์นญ์‹œํ‚ต๋‹ˆ๋‹ค. ๊ธ€์“ฐ๊ธฐ์™€ ๋Œ“๊ธ€์“ฐ๊ธฐ๋“ฑ์„ ํ†ตํ•œ ์ด๋ฒคํŠธ์ฐธ์—ฌ์‹œ ๋‹น์ฒจ๋œ ์œ ์ €์˜ ๊ฒŒ์ž„์•„์ด๋””๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

initํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ ์ดํ›„์— ๊ฐ€๋Šฅํ•œ ์‹œ์ ์— ํ˜ธ์ถœํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • gameId: ์‹๋ณ„๊ฐ€๋Šฅํ•œ ๊ฒŒ์ž„์•„์ด๋””๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋„ค์ด๋ฒ„์•„์ด๋”” ๋‹น ํ•˜๋‚˜๋งŒ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

void setGameId(string gameId);

๋‹ค์Œ์€ setGameId() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

  Glink.sharedInstance().setGameId("your_game_id_for_test")

setAppName(string appName) ๋ฉ”์„œ๋“œ

์•ฑ ์ด๋ฆ„์„ ์„ค์ •ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋กœ iOS ํ™˜๊ฒฝ์—์„œ๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค. ๋„ค์ด๋ฒ„ ์•„์ด๋””๋กœ ๋กœ๊ทธ์ธ ๊ฐœ๋ฐœ์ž ์„ผํ„ฐ์— ๋“ฑ๋กํ•œ ์•ฑ ์ด๋ฆ„๊ณผ ๋™์ผํ•˜๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

initํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ ์ดํ›„์— ๊ฐ€๋Šฅํ•œ ์‹œ์ ์— ํ˜ธ์ถœํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

void setAppName(string appName);

๋‹ค์Œ์€ setAppName() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

Glink.sharedInstance().setAppName("your_game_name")

setAppScheme(string appScheme) ๋ฉ”์„œ๋“œ

์•ฑ ์Šคํ‚ด์„ ์„ค์ •ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋กœ iOS ํ™˜๊ฒฝ์—์„œ๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค. ๋„ค์ด๋ฒ„ ์•„์ด๋””๋กœ ๋กœ๊ทธ์ธ ๊ฐœ๋ฐœ์ž ์„ผํ„ฐ์— ๋“ฑ๋กํ•œ ์•ฑ ์Šคํ‚ด๊ณผ ๋™์ผํ•˜๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

initํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ ์ดํ›„์— ๊ฐ€๋Šฅํ•œ ์‹œ์ ์— ํ˜ธ์ถœํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

void setAppScheme(string appScheme);

๋‹ค์Œ์€ setAppScheme() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

Glink.sharedInstance().setAppScheme("your_ios_app_scheme")

getAuthSettingDescription() ๋ฉ”์„œ๋“œ

์ธ์ฆ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ์‚ดํŽด๋ด์•ผ ํ•  ๋””๋ฒ„๊ทธ ์šฉ๋„์˜ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. Client ID, Client Secret, ์•ฑ ์ด๋ฆ„, ์•ฑ ์Šคํ‚ด์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๊ฐ’์ด ๋‘ ๋ฒˆ์”ฉ ์ถœ๋ ฅ๋˜๋Š”๋ฐ, ๊ด„ํ˜ธ ์—†์ด ์ถœ๋ ฅ๋˜๋Š” ๋‚ด์šฉ์€ ์‹ค์ œ ์ธ์ฆ์— ์‚ฌ์šฉ๋œ ๊ฐ’์ด๋ฉฐ ๊ด„ํ˜ธ๋กœ ์‹ธ์ธ ๋‚ด์šฉ์€ SDK์—์„œ ์บ์‹œํ•˜๊ณ  ์žˆ๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ์ธ์ฆ์— ์‚ฌ์šฉ๋œ ๊ฐ’, SDK์— ์บ์‹œ๋œ ๊ฐ’, ๊ทธ๋ฆฌ๊ณ  ๋„ค์ด๋ฒ„ ์•„์ด๋””๋กœ ๋กœ๊ทธ์ธ ๊ฐœ๋ฐœ์ž ์„ผํ„ฐ์— ๋“ฑ๋ก๋œ ๊ฐ’์ด ๋ชจ๋‘ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

string getAuthSettingDescription();

๋‹ค์Œ์€ getAuthSettingDescription() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

Glink.sharedInstance().getAuthSettingDescription()

getCountryCode() ๋ฉ”์„œ๋“œ

๋‹จ๋ง๊ธฐ์˜ countryCode๋ฅผ ์–ป์–ด์˜ต๋‹ˆ๋‹ค.

public string getCountryCode(Activity activity);

countryCode๋Š” ๋‘ ๊ฐœ์˜ ์•ŒํŒŒ๋ฒณ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ตญ๊ฐ€์ฝ”๋“œ(ISO 3166-1 alpha-2)์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ฝ”๋“œ ๋‚ด์—์„œ ๊ตญ๊ฐ€๋ณ„ ๋ถ„๊ธฐ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ๊ตญ๊ฐ€์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์œผ๋ฉฐ์ด์™ธ์˜ ๊ตญ๊ฐ€ ์ฝ”๋“œ๋Š” ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.

๊ตญ๊ฐ€์ฝ”๋“œ

๊ตญ๊ฐ€

CN

์ค‘๊ตญ

JP

์ผ๋ณธ

KR

๋Œ€ํ•œ๋ฏผ๊ตญ

TH

ํƒœ๊ตญ

US

๋ฏธ๊ตญ

๋‹ค์Œ์€ getCountryCode() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€ํ•œ๋ฏผ๊ตญ์˜ ๊ฒฝ์šฐ์—๋งŒ SDK ๋ฅผ ์ดˆ๊ธฐํ™” ํ•˜๊ณ  ๋ฐฐ๋„ˆ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค.

if (GLink.sharedInstance().getCountryCode().Equals("KR"))
{
    GLink.sharedInstance().init("LoungeId","ClientId","ClientSecret");
    GLink.sharedInstance().executeHomeBanner();
}

GLinkDelegate ๋”œ๋ฆฌ๊ฒŒ์ดํŠธ

Sdk ๋‚ด๋ถ€์—์„œ ํŠน์ • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„๋•Œ event ๋ฅผ ํ†ตํ•ด์„œ ์ด๋ฅผ GameEngine ์— ์•Œ๋ฆฝ๋‹ˆ๋‹ค.

SdkOpenedDelegate ์ด๋ฒคํŠธ

NaverGameSdk ๊ฐ€ ์‹คํ–‰๋˜์—ˆ์„๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

public delegate void SdkOpenedDelegate();
public static event SdkOpenedDelegate sdkOpenedEvent;

๋“ฑ๋ก๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

private void Awake()
{
    GLinkDelegate.sdkOpenedEvent += SdkOpenedEvent;
}
void SdkOpenedEvent()
{
    Debug.Log("BannerOpenedEvent");
}

SdkClosedDelegate ์ด๋ฒคํŠธ

NaverGameSdk ๊ฐ€ ์ข…๋ฃŒ๋˜์—ˆ์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

public delegate void SdkClosedDelegate();
public static event SdkClosedDelegate sdkClosedEvent;

๋“ฑ๋ก๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

private void Awake()
{
    GLinkDelegate.sdkClosedEvent += SdkClosedEvent;
}
void SdkClosedEvent()
{
    Debug.Log("BannerClosedEvent");
}

SdkCallInGameMenuCode ๋”œ๋ฆฌ๊ฒŒ์ดํŠธ

NaverGameSdk ์—์„œ ์ธ๊ฒŒ์ž„๋ฉ”๋‰ด์ฝ”๋“œ ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ณต์‹ ๋ผ์šด์ง€ ๊ด€๋ฆฌํŽ˜์ด์ง€ > SDK ๊ด€๋ฆฌ > ๋ฐฐ๋„ˆ๊ด€๋ฆฌ ํŽ˜์ด์ง€์—์„œ ๋ฐฐ๋„ˆ์— '์ธ๊ฒŒ์ž„ ๋ฉ”๋‰ด' ๋ฅผ ๋“ฑ๋กํ–ˆ์„๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Android ์™€ iOS ๊ฐ๊ฐ์˜ ํ”Œ๋žซํผ์— ๋”ฐ๋ผ ๋“ฑ๋กํ•œ ๊ฐ’์ด ๊ฐ์ž ์ „๋‹ฌ๋˜๋ฏ€๋กœ ๋‹ค๋ฅธ ๊ฐ’์„ ์ž…๋ ฅํ–ˆ๋‹ค๋ฉด ๊ฐ์ฐจ ์ฒ˜๋ฆฌํ•ด ์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

public delegate void SdkCallInGameMenuCode(string InGameMenuCode);
public static event SdkCallInGameMenuCode sdkCallInGameMenuCode;

๋“ฑ๋ก๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

private void Awake()
{
    GLinkDelegate.sdkCallInGameMenuCode += SdkCallInGameMenuCode;
}
void SdkCallInGameMenuCode(string inGameMenuCode)
{
    GLink.sharedInstance().terminateSdk();
    Debug.Log("SdkCallInGameMenuCode " + inGameMenuCode);
}

๋นŒ๋“œ

๊ฐ ํ”Œ๋žซํผ์— ๋งž๊ฒŒ ๋นŒ๋“œํ•ด์„œ ์ •์ƒ์ ์œผ๋กœ ๋นŒ๋“œ๋˜๋ฉด SDK์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

1. ๋ฐœ์ƒ ๊ฐ€๋Šฅํ•œ ๋นŒ๋“œ ์—๋Ÿฌ

1-1 ์•ˆ๋“œ๋กœ์ด๋“œ ๋นŒ๋“œ์—๋Ÿฌ

2. Unity 2019 ์ดํ•˜๋ฒ„์ „์˜ ๋นŒ๋“œ

GooglePlayStore ์ •์ฑ… (https://support.google.com/googleplay/android-developer/answer/11926878?hl=ko) ์— ๋”ฐ๋ผ 2022๋…„ 11์›”๋ถ€ํ„ฐ targetSDK 31์ด ๊ฐ•์ œ๋ฉ๋‹ˆ๋‹ค. ์ด์—๋”ฐ๋ผ NaverGameSDK๋„ targetSDK31 ๋ฒ„์ „์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ€์ด๋“œ๋˜๋ฉฐ, Unity 2019 ์ดํ•˜ ๋ฒ„์ „์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ œ์•ฝ์‚ฌํ•ญ์ด ๋งŽ์•„ ๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. Unity2020 ์ดํ›„ ๋ฒ„์ „์˜ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ด ๋“œ๋ฆฌ๋ฉฐ Unity2019 ์ดํ•˜ ๋ฒ„์ „์˜ ๋นŒ๋“œ์—๋Ÿฌ์— ๋Œ€ํ•œ ๊ธฐ์ˆ ์  ์ง€์›์€ ํž˜๋“  ์  ์–‘ํ•ด ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

2-0. Unity 2019 ๋ฒ„์ „์—์„œ targetSDK31 ์ด์ƒ์œผ๋กœ gradle ๋นŒ๋“œ ์„ค์ •

Unity 2019 ๋ฒ„์ „์—์„œ targetSDK31 ์ด์ƒ์„ ์ปดํŒŒ์ผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ปค์Šคํ…€ ๊ทธ๋ž˜๋“ค์„ ์„ค์ •ํ•ด ์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ๊ทธ๋ž˜๋“ค ์„ค์ •์„ ์ง„ํ–‰ํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

2-1. Unity 2019 ๋ฒ„์ „์„ ์œ„ํ•œ NaverGameSDK Android ์„ค์ •

Unity 2020 ์ดํ›„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒจํ‚ค์ง€์˜ 'NGSDK/Plugins/Android/navergamesdk.androidlib/libs ํด๋”์—์„œ [navergame-sdk-gradle-x.x.x.aar] ํŒŒ์ผ์„ 'NGSDK/Plugins/Android/' ํด๋”๋กœ ์ด๋™ํ•˜๊ณ  [navergamesdk.androidlib] ํด๋”๋Š” ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

Project Settings > Player > Android Tab > Publishing Settings > Build๋กœ ์ด๋™ํ•˜์—ฌ Custom Main Gradle Template ์™€ Custom Gradle Properties Template๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์˜ต์…˜์ด ์ฒดํฌ๋˜์—ˆ๋‹ค๋ฉด Assets/Plugins/Android ํด๋”์— mainTemplate.gradle ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ํŒŒ์ผ์„ ํŽธ์ง‘๊ธฐ๋กœ ์—ด์–ด dependencies ํ•ญ๋ชฉ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ข…์† ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation "com.naver.nid:naveridlogin-android-sdk:4.2.6" // naveridlogin
        implementation "org.jetbrains.kotlin:kotlin-stdlib:1.7.20"      // Kotlin
        implementation "androidx.viewpager2:viewpager2:1.0.0"           // Viewpager2
        implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"   //swiperefreshlayout
        implementation "com.github.bumptech.glide:glide:3.7.0"          // Glide
        implementation "com.squareup.retrofit2:retrofit:2.9.0"          // Retrofit2
        implementation "com.squareup.retrofit2:converter-gson:2.9.0"
**DEPS**}

1.2.0 ๋ฒ„์ „๋ถ€ํ„ฐ ๊ธ€์“ฐ๊ธฐ ๊ธฐ๋Šฅ์„ ์œ„ํ•˜์—ฌ naveridlogin-android-sdk ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๊ณ , kotlin-stdlib, retrofit, converter-gson ์˜ ๋ฒ„์ „์ด ๋ณ€๊ฒฝ๋˜์—ˆ์œผ๋‹ˆ 1.x.x ๋ฒ„์ „์—์„œ ์—…๊ทธ๋ ˆ์ด๋“œ์‹œ์—๋Š” ๋ฐ˜๋“œ์‹œ ํ™•์ธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  gradleTemplate.properties ํ•ญ๋ชฉ๋„ ์—ด์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด android.useAndroidX, android.enableJetifierํ•ญ๋ชฉ์„ true ๋กœ ์ถ”๊ฐ€ ํ•ด์ค๋‹ˆ๋‹ค.

android.useAndroidX = true
android.enableJetifier=true
**ADDITIONAL_PROPERTIES**

๊ฐ€๋กœ ๋ชจ๋“œ, ์„ธ๋กœ ๋ชจ๋“œ

NaverGameSDK๋Š” ๊ฐ€๋กœ ๋ชจ๋“œ์™€ ์„ธ๋กœ ๋ชจ๋“œ๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•œ๋‹ค.

Android, iOS ํ™˜๊ฒฝ ๋ชจ๋‘ ๋ณ„๋„๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์•„๋„ ํ™”๋ฉด์˜ ๊ฐ€๋กœ, ์„ธ๋กœ ์ƒํƒœ์— ๋”ฐ๋ผ ๊ฐ€๋กœ ๋ชจ๋“œ, ์„ธ๋กœ ๋ชจ๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์ ์šฉ๋œ๋‹ค.

Last updated

Was this helpful?