본문으로 건너뛰기

Sign in with Google 계정 인증 (v1 호환)

  • 구글 로그인 웹 인증 방식 입니다. google v1 방식 과 호환 가능 합니다.
  • iOS, 안드로이드 통합 사용 가능 합니다.
  • 플레이나누 SDK 5.0.0.6 이상 버전을 권장합니다. (브라우저 캐시 문제 해결)
  • 최소 요구 버전: 5.0.0.3

호출 정보

Sign_in_with_Google(clientId)

호출 상세 정보

파라미터설명타입
clientIdOAuth 웹 클라이언트 IDString

소스 코드

using System;
using System.Threading.Tasks;
using Google;
using PlayNANOO;

public class PlayNANOOExample : MonoBehaviour
{
Plugin plugin;
private string clientId = "웹클라이언트 ID를 입력합니다.";

void Start()
{
plugin = Plugin.GetInstance();

// Android: DeepLink 콜백 등록
Application.deepLinkActivated += OnDeepLink;

}

// Android용 DeepLink 콜백
private void OnDeepLink(string url)
{
string token = ExtractIdToken(url);
if (!string.IsNullOrEmpty(token))
{
SendTokenToServer(token);
}
else
{
Debug.LogError("[GoogleOAuth] No id_token found in deep link!");
}
}

private string ExtractIdToken(string url)
{
if (!url.Contains("#")) return null;
string fragment = url.Split('#')[1];
string[] parts = fragment.Split('&');
foreach (var p in parts)
{
if (p.StartsWith("id_token="))
return p.Substring("id_token=".Length);
}
return null;
}

//인증 진행 메소드.
public void Sign_in_with_Google()
{
plugin.AccountManagerV20240401.SignInWithGoogle(clientId);
}

//인증 완료 시 토큰 받는 메소드.
private void SendTokenToServer(string token)
{
//toten 값으로 SocialChange 또는 SocialSignIn 진행.
//SocialChange(token, Configure.PN_ACCOUNT_GOOGLE);
// or
//SocialSignIn(token, Configure.PN_ACCOUNT_GOOGLE);
}

//계정 전환 예시. SocialChange
public void SocialChange(string token, string accountType)
{
//비회원 연동 - 회원 전환 참조.
plugin.AccountManagerV20240401.SocialChange(accessToken, accountType, (status, errorCode, jsonString, values) => {

}
}

//구글 계정 등록 예시. SocialSignIn
public void SocialSignIn(string token, string accountType)
{
plugin.AccountManagerV20240401.SocialSignIn(token, accountType, (status, errorCode, jsonString, values) =>
{
if (status == Configure.PN_API_STATE_SUCCESS)
{
Debug.Log(values["access_token"].ToString());
Debug.Log(values["refresh_token"].ToString());
Debug.Log(values["uuid"].ToString());
Debug.Log(values["openID"].ToString());
Debug.Log(values["nickname"].ToString());
Debug.Log(values["linkedID"].ToString());
Debug.Log(values["linkedType"].ToString());
Debug.Log(values["country"].ToString());
Debug.Log(values["purchaseCount"].ToString());
Debug.Log(values["purchaseTotalPrice"].ToString());
Debug.Log(values["purchaseCurrencyCode"].ToString());
Debug.Log(values["purchaseVoidedCount"].ToString());
Debug.Log(values["purchaseVoidedTotalPrice"].ToString());
Debug.Log(values["purchaseVoidedCurrencyCode"].ToString());
Debug.Log(values["country"].ToString());
Debug.Log(values["timezone"].ToString());
Debug.Log(values["offset"].ToString());
Debug.Log(values["joinPeriod"].ToString());
}
else
{
if (values != null)
{
if (values["ErrorCode"].ToString() == "30007")
{
Debug.Log(values["WithdrawalKey"].ToString());
}
else if (values["ErrorCode"].ToString() == "70002")
{
Debug.Log(values["BlockKey"].ToString());
}
else
{
Debug.Log("Fail");
}
}
else
{
Debug.Log("Fail");
}
}
});
}
}

호출 방법

Sign_in_with_Google() 를 호출 하면 웹 접속으로 로그인할 구글 계정 선택창이 뜹니다

계정 선택 후 인증이 완료 되면 자동으로 폰으로 이동 되고

SendTokenToServer(string token) 를 통해 token 값이 넘어 옵니다

해당 토큰 값으로 구글 계정 연동의 계정 등록(SocialSignIn) 또는 회원 전환(SocialChange) 를 진행 하시면 됩니다.

  • 비회원 연동 후 구글 계정 전환 이면 회원 전환 진행
  • 비회원 연동 없이 처음 부터 구글 로그인 진행 이면 계정 등록 진행

플랫폼별 콜백 처리

Android

  • DeepLink 방식으로 콜백을 받습니다.
  • Application.deepLinkActivated 이벤트에 콜백 메소드를 등록합니다.
  • Chrome Custom Tabs 라이브러리가 포함된 경우 앱 내 오버레이 형태로 브라우저가 열립니다.
  • 라이브러리가 없으면 외부 Chrome 브라우저로 열리며, 인증 완료 후 딥링크로 앱 복귀합니다.

iOS

  • ASWebAuthenticationSession을 사용하여 앱 내에서 인증 세션이 열립니다.
  • SetGoogleAuthCallback으로 콜백을 등록하면 인증 완료 시 호출됩니다.
void Start()
{
Plugin plugin = Plugin.GetInstance();

// iOS Google OAuth 콜백 등록
plugin.SetGoogleAuthCallback((result) =>
{
if (result.StartsWith("error:"))
{
Debug.LogError("[GoogleOAuth] iOS Auth Error: " + result);
return;
}

// result는 콜백 URL 전체 (예: {game_id}://#id_token=xxx&...)
// ※ mygame:// scheme은 deprecated 되었습니다. PlayNANOO 콘솔에 등록된 Game ID를 scheme으로 사용합니다.
string token = ExtractIdToken(result);
if (!string.IsNullOrEmpty(token))
{
// 토큰으로 SocialSignIn 또는 SocialChange 호출
}
});
}

private string ExtractIdToken(string url)
{
if (!url.Contains("#")) return null;
string fragment = url.Split('#')[1];
string[] parts = fragment.Split('&');
foreach (var p in parts)
{
if (p.StartsWith("id_token="))
return p.Substring("id_token=".Length);
}
return null;
}

통신 결과

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"Token" : {
"AccessToken" : "String",
"RefreshToken" : "String"
},
"Player" : {
"UserUniqueID" : "String",
"OpenID" : "String",
"Nickname" : "String",
"LinkedID" : "String",
"LinkedType" : "String",
"PurchaseCount" : "Integer",
"PurchaseTotalPrice" : "Double",
"PurchaseCurrencyCode" : "String",
"PurchaseVoidedCount" : "Integer",
"PurchaseVoidedTotalPrice" : "Double",
"PurchaseVoidedCurrencyCode" : "String",
"Country" : "String",
"Timezone" : "String",
"Offset" : "Integer",
"JoinPeriod" : "Integer"
}
}

통신 결과 상세 정보

데이터키설명타입
Token.AccessToken플레이어 접속 토큰string
Token.RefreshToken플레이어 갱신 토큰string
Player.UserUniqueID플레이어 고유 식별 아이디string
Player.OpenID플레이어 고유 식별 오픈 아이디string
Player.Nickname플레이어 닉네임string
Player.LinkedID플레이어 연결 식별 아이디string
Player.LinkedType플레이어 연결 타입string
Player.PurchaseCount플레이어 결제 횟수integer
Player.PurchaseTotalPrice플레이어 결제 누적 금액double
Player.PurchaseCurrencyCode플레이어 결제 화폐string
Player.PurchaseVoidedCount플레이어 결제 환불 횟수integer
Player.PurchaseVoidedTotalPrice플레이어 결제 환불 누적 금액double
Player.PurchaseVoidedCurrencyCode플레이어 결제 환불 화폐string
Player.Country플레이어 국가 코드string
Player.Timezone플레이어 국가 타임존string
Player.Offset플레이어 타임존 시간차이 (UTC 기준)integer
Player.JoinPeriod플레이어 가입 기간integer
WithdrawalKey탈퇴 계정 조회 키string

에러 정보

플레이어 정보가 존재하지 않을 경우.
ErrorCode : 30000
ErrorMessage : NotFoundAccountException

플레이어 정보가 다른 디바이스에서 사용 중인 경우
ErrorCode : 30006
ErrorMessage : DuplicatedDeviceException

플레이어가 탈퇴를 신청한 경우 ErrorCode : 30007 ErrorMessage : WithDrawalException

Google 로그인 시 403 오류가 발생하는 경우 (Android) ErrorMessage : disallowed_useragent WebView(내장 브라우저)에서 Google OAuth가 차단되었습니다. Chrome 브라우저 설치 여부와 기본 브라우저 설정을 확인하세요. 자세한 내용은 환경 설정 - Android 403 오류 항목을 참고하세요.