Android 注册及认证
通过外部浏览器进行 Apple OAuth 登录处理。支持在 Android 上使用 Apple 登录。
工作方式
- 从 PlayNANOO 服务器获取 Apple OAuth URL
- 在外部浏览器中进行 Apple 账户登录
- 通过 Deep Link 接收 token
- 使用令牌调用账户注册(SocialSignIn)或会员转换(SocialChange)API
Unity 实现
using System;
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
/// <summary>
/// Apple Sign In (Android/iOS)
/// 외부 브라우저를 통한 Apple OAuth 로그인 처리
/// </summary>
public class iOSSignin : MonoBehaviour
{
[Serializable]
private class AppleUrlResponse : BaseResponse
{
public string Url;
}
void Start()
{
Application.deepLinkActivated += OnDeepLink;
}
void OnDestroy()
{
Application.deepLinkActivated -= OnDeepLink;
}
/// <summary>
/// Apple 로그인 시작
/// </summary>
public void Sign_in_with_Apple()
{
StartCoroutine(GetAppleUrlAndOpen());
}
private IEnumerator GetAppleUrlAndOpen()
{
yield return HttpClient.Send<object, AppleUrlResponse>(
UnityWebRequest.kHttpVerbGET,
"https://service-account.playnanoo.com/api/apple/url",
requireToken: false,
body: null,
onSuccess: (response) =>
{
if (!string.IsNullOrEmpty(response.Url))
{
Application.OpenURL(response.Url);
}
},
onError: (error) => { }
);
}
private void OnDeepLink(string url)
{
if (url.Contains("type=apple"))
{
string status = ExtractParam(url, "status");
string token = ExtractParam(url, "token");
if (status == "success" && !string.IsNullOrEmpty(token))
{
SendTokenToServer(token);
}
}
}
private void SendTokenToServer(string token)
{
//token 값으로 SocialChange 또는 SocialSignIn 진행.
//SocialChange(token, PN_ACCOUNT_APPLE_ID);
// or
//SocialSignIn(token, PN_ACCOUNT_APPLE_ID);
}
private string ExtractParam(string url, string key)
{
string search = key + "=";
if (url.Contains(search))
{
int start = url.IndexOf(search) + search.Length;
int end = url.IndexOf("&", start);
if (end == -1) end = url.Length;
return url.Substring(start, end - start);
}
return null;
}
}
使用方法
1. 开始 Apple 登录
Sign_in_with_Apple();
打开外部浏览器,用户使用 Apple 账户登录。
2. 使用令牌进行账户关联
认证完成后,使用 SendTokenToServer 方法中获取的 token 调用 PlayNANOO API:
新登录(SocialSignIn)
public void SocialSignIn(string token, string accountType)
{
// Apple 账户首次登录
//accountType : PN_ACCOUNT_APPLE_ID
}
会员转换(SocialChange)
public void SocialChange(string token, string accountType)
{
// 从游客转换为 Apple 会员
//accountType : PN_ACCOUNT_APPLE_ID
}
参考
- 账户类型值:
PN_ACCOUNT_APPLE_ID = "APPLE ID"- 详细信息请参考 其他 > 账户类型信息 - 会员转换:请参考 游客关联 > 会员转换 文档