티스토리 뷰
반응형
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 #웹
반응형
댓글
반응형