티스토리 뷰

반응형

 

NHN GPM 웹뷰 사용하여 웹뷰 구현

https://assetstore.unity.com/packages/tools/utilities/game-package-manager-147711

 

Game Package Manager | 유틸리티 도구 | Unity Asset Store

Use the Game Package Manager from NHN Corp. on your next project. Find this utility tool & more on the Unity Asset Store.

assetstore.unity.com

 

#asset store에서 설치

 

#Manager->WebView 설치

 

#안드로이드 설정

https://github.com/nhn/gpm.unity/blob/main/docs/WebView/README.md#android

 

 

#mainTemplate.gradle

dependencies {
    // 필수 구성 요소
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.72'
   
    // ShowSafeBrowsing API를 사용할 경우 추가
    implementation 'androidx.browser:browser:1.3.0'
}

 

#gradleTemplate.properties

**ADDITIONAL_PROPERTIES**
android.useAndroidX=true

 

 

#예제코드

using Gpm.WebView;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using static Gpm.WebView.GpmWebViewCallback;
using static Gpm.WebView.GpmWebViewRequest;

public class WebviewManager : MonoBehaviour
{
    public string URL = "https://naver.com/";
    private int width = 1008;
    private int height = 567;
    private int x = 0;
    private int y = 0;
    private List<string> schemes;



    Configuration config;

    private void Start()
    {
        Init();
        //ShowUrl();
    }

    private void Init()
    {
        SetSchemes();
        SetConfiguration();
    }

    private void SetSchemes()
    {
        schemes = new List<string>()
            {
            "USER_ CUSTOM_SCHEME"
            };
    }

    public void ShowUrl()
    {
        GpmWebView.ShowUrl(
            URL,
         config,
            OnCallback,
            schemes
           );
    }

    public void HideUrl()
    {
        GpmWebView.Close();
    }

    /// <summary>
    /// 콜백함수 참고
    /// </summary>
    /// <param name="callbackType"></param>
    /// <param name="data"></param>
    /// <param name="error"></param>
    private void OnCallback(
        GpmWebViewCallback.CallbackType callbackType,
        string data,
        GpmWebViewError error)
    {
        Debug.Log("OnCallback: " + callbackType);
        switch (callbackType)
        {
            case GpmWebViewCallback.CallbackType.Open:
                if (error != null)
                {
                    Debug.LogFormat("Fail to open WebView. Error:{0}", error);
                }
                break;
            case GpmWebViewCallback.CallbackType.Close:
                if (error != null)
                {
                    Debug.LogFormat("Fail to close WebView. Error:{0}", error);
                }
                break;
            case GpmWebViewCallback.CallbackType.PageStarted:
                if (string.IsNullOrEmpty(data) == false)
                {
                    Debug.LogFormat("PageStarted Url : {0}", data);
                }
                break;
            case GpmWebViewCallback.CallbackType.PageLoad:
                if (string.IsNullOrEmpty(data) == false)
                {
                    Debug.LogFormat("Loaded Page:{0}", data);
                }
                break;
            case GpmWebViewCallback.CallbackType.MultiWindowOpen:
                Debug.Log("MultiWindowOpen");
                break;
            case GpmWebViewCallback.CallbackType.MultiWindowClose:
                Debug.Log("MultiWindowClose");
                break;
            case GpmWebViewCallback.CallbackType.Scheme:
                if (error == null)
                {
                    if (data.Equals("USER_ CUSTOM_SCHEME") == true || data.Contains("CUSTOM_SCHEME") == true)
                    {
                        Debug.Log(string.Format("scheme:{0}", data));
                    }
                }
                else
                {
                    Debug.Log(string.Format("Fail to custom scheme. Error:{0}", error));
                }
                break;
            case GpmWebViewCallback.CallbackType.GoBack:
                Debug.Log("GoBack");
                break;
            case GpmWebViewCallback.CallbackType.GoForward:
                Debug.Log("GoForward");
                break;
            case GpmWebViewCallback.CallbackType.ExecuteJavascript:
                Debug.LogFormat("ExecuteJavascript data : {0}, error : {1}", data, error);
                break;
#if UNITY_ANDROID
            case GpmWebViewCallback.CallbackType.BackButtonClose:
                Debug.Log("BackButtonClose");
                break;
#endif
        }

    }
    private void SetConfiguration()
    {
        config = new Configuration()
        {
            style = GpmWebViewStyle.POPUP,
            orientation = GpmOrientation.UNSPECIFIED,
            isClearCookie = true,
            isClearCache = true,
            backgroundColor = "#FFFFFF",
            isNavigationBarVisible = false,
            navigationBarColor = "#00000000",
            title = "",
            isBackButtonVisible = false,
            isForwardButtonVisible = false,
            isCloseButtonVisible = false,
            supportMultipleWindows = true,
            position = new Position
            {
                hasValue = true,
                x = this.x,
                y = this.y
            },
            size = new Size
            {
                hasValue = true,
                width = this.width,
                height = this.height
            },
        };
    }
}

 

 

 

#android #unity #webview #웹

반응형
댓글
반응형