Android

Quick Start

下载最新版本

运行示例项目

在Android Studio运行Naver游戏SDK示例项目的方法如下所示:

  1. 在Android Studio打开sample/navergame-sdk-sample-android-studio文件夹内的项目。

  2. 构建项目。

  3. 确认在应用程序可正常运行SDK。

1. 应用程序清单设置

如下所示,对AndroidManifest.xml文件添加访问权限和活动。

1.1 NaverGame SDK访问权限

添加NaverGame SDK所需访问权限。

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

2. Gradle设置

对使用SDK的module单位的build.gradle进行设置。

2.1 PlugIn 设置

  • NaverGameSdk使用kotlin。

  • 如下所示,对plugins声明区段进行Kotlin插件声明。

plugins {
    id 'com.android.application'
    id 'kotlin-android'
}

2.2 添加库

  • 在项目文件夹创建libs文件夹后,粘贴下载的navergame-sdk-gradle-XXX.aar文件。

  • Android Studio用aar库是为防止dependency冲突,利用gradle管理外部库的版本。

  • libs文件夹结构视gradle版本和项目设置可能有所不同,但基本上设置在与src文件夹同一位置即可。

2.3 Dependency设置

  • 添加NaverGameSdk使用的库。

  • 如下所示,对Dependency声明区段添加库。

  • glide库和retrofit库不支持不同版本间的兼容,因此请保留NaverGameSDK的版本名称。

  • 与glide、retrofit库使用的其他库发生冲突时,可用库分离项目,保持dependency。

dependencies {
    implementation file('libs/navergame-sdk-gradle-x.x.x.aar')            // NaverGameSDK
    
    implementation "org.jetbrains.kotlin:kotlin-stdlib:1.3.72"            // Kotlin
    implementation "androidx.viewpager2:viewpager2:1.0.0"
    implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0" 
    implementation "com.github.bumptech.glide:glide:3.7.0"                // Glide
    implementation "com.squareup.retrofit2:retrofit:2.6.4"                // Retrofit, Gson
    implementation "com.squareup.retrofit2:converter-gson:2.6.4"          // Retrofit, Gson
}

3. ProGuard 设置

使用NaverGame SDK时,如果将minifyEnabled设置为true,那么应添加除ProGuard以外的选项。

  • 打开proguard-rules.pro文件,输入如下内容:

  • ProGuard声明重复也不会导致问题,因此建议直接粘贴。

  • 相应文件还可在NaverGameSDK Github下载

#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.service** { *; }
-keep class com.navercorp.nng.android.sdk.api.entity.** { *; }

-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 class com.navercorp.nng.android.sdk.NNGConfig** { *; }


#end of sdk

4. 初始化

根据NaverGame SDK支持的语言,如下所示,对NaverGame SDK进行初始化。

4.1 NaverGame SDK初始化

NaverGame SDK初始化时,设置如下初始化选项,调用init() method。 init() method是PLUG SDK初始化方法。

public class MainActivity extends Activity {

  @Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    /**
     * 네이버 아이디로 로그인 개발자 센터에서 받은 정보로 SDK를 초기화한다.
     * Glink 클래스의 다른 메서드를 호출하기 전에 반드시 초기화를 먼저 해야 한다.
     * 개발자 센터 주소: https://nid.naver.com/devcenter/main.nhn
     */
    final String loungeId = "naver_game_4developer"";
    final String clientId = "197CymaStozo7X5r2qR5";
    final String clientSecret = "evCgKH1kJL";
    NNGLink.initModule(this, loungeId, clientId, clientSecret );
    ...
}

5. NaverGame SDK开始

完成初始化后,运行NaverGame SDK。

5.1 startHome() method

startHome() method是开始主页横幅的方法。

/**
* 홈배너 실
*/
NNGLink.startHome(activity)

使用NaverGameSDK

initModule() method

初始化SDK。

public static void initModule
    (Activity activity, String loungeId, String clientId, String secret);

下面是具体运行initModule() method的示例。

final String loungeId = "naver_game_4developer"";
final String clientId = "UKvNABLDsyEJusJGsXL2";
final String clientSecret = "rK4suc_Qd0";
NNGLink.initModule(this, loungeId, clientId, clientSecret );

finishSdk() method

finishSdk() method是终止NaverGameSDK的方法。在特定情况应终止SDK时调用。例如,运行通过回调GLinkDelegate传达的游戏内菜单代码时,应调用finishSdk() method关闭SDK。

public static void finishSdk();

startHome() method

运行主页横幅。

public static void startHome(Activity activity);

下面是具体运行startHome() method的示例。

   /**
   * 홈 배너 시작
   */
  NNGlink.startHome(activity)

startSorry() method

单独弹出维护用或通用通知事项。

public static void startSorry(final Activity activity);

下面是具体运行startSorry() method的示例。

   /**
   * 점검용 배너 시작 
   */
  NNGLink.startSorry(activity)

startBoard(int boardId) method

直接运行在官方大厅管理页 > SDK管理 > 公告栏管理页登记的特定公告栏的方法。

public static void startBoard(final Activity activity, int boardId);

下面是具体运行executeBoard() method的示例。

NNGLink.startBoard(activity,1)

startFeed(long feedId, bool isTempFeedId) method

通过登记留言的编号直接运行的方法。如果是通过预约显示登记的预约留言,应在FeedId输入预留言的编号,并将IsTempFeedId输入为True。 在预留言发布前,即使运行method也不会显示留言。

  • FeedId:留言或预留言的编号

  • IsTempFeedId:FeedId是留言时,显示false;FeedId是预留言时,显示true

public static void startFeed(final Activity activity, long feedId, boolean isTempFeedId);

下面是具体运行executeFeed() method的示例。

NNGLink.startFeed(activity,50154,false)

getCountryCode()method

获取安卓设备的countryCode。

public static String getCountryCode(Activity activity);

countryCode是由2个字母构成的国家代码(ISO 3166-1 alpha-2)。利用这一代码可在代码内按国家进行分支处理。主要国家代码如下所示,其他国家代码请参考链接

国家代码

国家

CN

中国

JP

日本

KR

韩国

TH

泰国

US

美国

下面是使用getCountryCode() method,仅在韩国初始化SDK调用横幅的示例。

if (NNGLink.getCountryCode(getActivity()).equals("KR")) {
    NNGLink.initModule(getActivity() ,LOUNGE_ID, CLIEND_ID, CLIENT_SECRET);
    NNGLink.startHome(getActivity());
}

NNGCallbackListener回调监听器

SDK内发生特定事件时,通过回调监听器传达。 登记方式如下所示:

NNGLink.setSdkLoadListener(new NNGCallbackListener() {
        @Override
        public void onSdkDidLoaded() {
            nngSdkLoaded();
        }

        @Override
        public void onSdkDidUnloaded() {
            nngSdkUnLoaded();
        }

        @Override
        public void onCallInGameMenuCode(@NotNull String moveTo) {
            nngSdkCallInGameMenuCode(moveTo);
        }
    });

onSdkDidLoaded()method

发生在运行NaverGameSdk时。

onSdkDidLoaded()method

发生在终止NaverGameSdk时。

onCallInGameMenuCode()method

发生在NaverGameSdk运行游戏内菜单代码时。在官方大厅管理页 > SDK管理 > 横幅管理页对横幅登记“游戏内菜单”时使用。视Android和iOS平台分别传达不同登记值,因此如果输入不同值,应分别进行处理。

横屏模式,竖屏模式

Naver游戏SDK支持横屏模式和竖屏模式。 Android环境下无需特别设置,可自动随屏幕的横向或竖向状态切换横屏模式或竖屏模式。

Last updated

Was this helpful?