블로그에 한 번 작성한 적 있는 게시글 입니다.(2023.7.4)
기획팀에서 네이버와 구글을 통해서 로그인 됐으면 좋겠다고 하여 (....) 난생 처음 유니티에서 타 sns를 활용한 로그인 구현을 진행해보았다.
근데 왠걸.. 처음에 열심히 자료 찾아봤을땐 전부 Unity Android나 IOS 플랫폼, 모바일 등..에서 구현하는 방법 밖에 나오지 않았다. 참고는 못하겠다 싶어서 결국 네이버 개발자 문서를 찾아보게 되었다.
유니티 pc 게임 (Windows App) 네이버 로그인 방법
1. 애플리케이션 등록
로그인 구현하기 전 일단 이 링크에서 본인이 개발할 애플리케이션을 등록해줘야한다.

필요한 정보들을 체크해주고 환경 추가에서 어떤 환경에서 서비스를 제공할 것인지 골라준다.
나는 유니티 기반 pc 게임을 제작할거니까 Windows App으로 선택해주었다.

그럼 이런 항목이 생기는데
- 다운로드 URL : 이 프로그램(게임)을 다운받을 수 있는 URL
- Callback URL: 네이버 로그인 성공후 redirect할 URL, access_token값 받을 URL
이라고 생각하면 된다. 그런데 아직 게임을 출시하지 않았고 게임 서버도 만들지 않은 상태라면 둘다 당연히 없다.
나도 같은 상황이었는데 그냥 다운로드 URL은 스팀 URL로 해두었고 Callback URL은 네이버에서 제공해주는 Windows App SDK 튜토리얼 문서에 callback 예시로

https://nid.naver.com/login/noauth/oauthCallback.nhn 이 링크가 나와있길래 이걸로 사용하였다.
보니까 실패했을 때랑 아무것도 안한 기본 상태에선 저렇게 fail로 뜨고 성공하면 token값이랑 state와 함께 success가 뜬다.
*여기서 중요한 점*
-서비스 설정 오류 문제 (~에 로그인 할 수 없습니다.)

다 해줬다면 환경 추가에서 pc웹 환경도 추가해주자. 그리고 네이버 로그인 Callback URL에 Windows App Callback URL에 적었던 https://nid.naver.com/login/noauth/oauthCallback.nhn 이걸 똑같이 적어줘야한다.(게임 서버 URL이 있어서 Callback URL에 그 서버 주소를 적었다면 pc웹 callback URL에도 그 서버 주소를 동일하게 적어주면 된다.) 왜인지는 아직 모르겠다. 다만 이거 안해주고 실행했더니 서비스 오류가 떠서 이거 해결하니라고 몇시간 소모했다. 겨우 해결책 찾아가지고.. 사실 이 글 쓰게 된 이유도 이 오류를 누구도 정리해놓은 사람이 없길래 빡쳐서이다. 누군가도 나처럼 찾고 있을 수도 있지 않을까?
저 서비스 URL도 아직 서버가 없으니까 일단 나는 callback 주소랑 똑같이 해놨다.
여기서 설정한 URL들은 다 나중에 설정에서 수정가능하니까 없어도 일단 임의로 적어놔도 괜찮다고 생각했다.
다 끝나고 등록을 마치면

Client ID와 Client Secret을 받을 수 있다.
이제 등록은 끝나고 c#스크립트에서 처리만 해주면 된다.
2. c#스크립트 작성
유니티에서 네이버 로그인과 관련된 스크립트를 생성해준다.
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using static Manager;
using Random = System.Random;
public class NaverAuthManager : MonoBehaviour
{
private static GameObject NaverAuthObject = null;
public static bool IsInitialized { get; private set; } = false;
public static void CheckValid()
{
if (!IsInitialized)
{
Initialize();
}
}
private static void Initialize()
{
IsInitialized = true;
NaverAuthObject = new GameObject("NaverAuthObject");
NaverAuthObject.AddComponent<ManagerGameObject>();
GameObject.DontDestroyOnLoad(NaverAuthObject);
}
public void NaverLoginBtn()
{
UserLogin();
}
private void UserLogin()
{
string naver_client_id = "";
string naver_clientSecret = "";
string naver_redirect_uri = "https://nid.naver.com/login/noauth/oauthCallback.nhn";
string naver_state = (new Random()).Next().ToString();
string url = "https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=" + naver_client_id + "&redirect_uri=" + naver_redirect_uri + "&state=" + naver_state;
Application.OpenURL(url);
}
}
나는 게임 실행했을 때 CheckValid()를 호출해서 바로 해제 되지 않는 NaverAuthManager오브젝트가 생성되게 하였다.

이건 처음 시작씬 임의의 오브젝트에 붙어있는 SceneStarter스크립트
이부분은 개발자가 하고싶은대로 구현하면 되는 부분이라 응용하거나 알아서 다른 방법으로 하면 된다.
중요한 부분은
private void UserLogin()
{
string naver_client_id = "";
string naver_clientSecret = "";
string naver_redirect_uri = "https://nid.naver.com/login/noauth/oauthCallback.nhn";
string naver_state = (new Random()).Next().ToString();
string url = "https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=" + naver_client_id + "&redirect_uri=" + naver_redirect_uri + "&state=" + naver_state;
Application.OpenURL(url);
}
여기 네이버 로그인 호출하는 부분이다. 간단하게 아까 발급받은 clientID와 설정해놓은 callback url(redirect url)을 적어준다. state부분은 보안관련해서 있는 매개변수로 난수이기 때문에 저렇게 해주면 된다.
그리고 url에서 저런식으로 다 합쳐주면 된다.
그다음 나는 유니티에서 웹사이트를 띄울 수 있는 방법 중 하나인 Application.OpenURL()을 통해 url을 띄워 네이버 로그인 창으로 이동하게 하였다. 이부분도 개발자가 원하는 대로 구현해주면 된다.

난 이미 네이버엔 로그인되어있던 상황이라서 바로 이렇게 떴다. 동의를 눌러 로그인을 하면 callbak url로 적었던 웹페이지로 이동하게 된다.
이제 발급되는 access token으로 원하는 서비스를 접근하면 된다. 그리고 이렇게 로그인한 회원은 게임 서버와 db 서버로 정보를 넘겨줘 저장해놓고 사용하면 되는 것같다. (아직 안해봐서 모름)
P.S
생각해보니 내가 지금까지 했던 pc게임들도 네이버나 페이스북, 구글로 로그인하는걸 본적이 없는 것 같다. 그래서 자료가 별로 없었던걸까..?
'Unity' 카테고리의 다른 글
| [Unity] pc 게임 네이버 로그인 연동하기(2) (1) | 2024.09.22 |
|---|---|
| [Unity] VR visual studio code 연동 문제 해결 (0) | 2024.08.25 |