跳转到主要内容

账号注册及认证

使用Facebook账号进行注册及认证。iOS和Android可统一使用。

URL确认

此API使用 service-account.playnanoo.com 域名。

API信息

  • URL: https://service-account.playnanoo.com/api/v20240101/social/signin
  • Method: PUT
  • 需要认证: 否

请求参数

参数类型必填说明
account_tokenstring必填社交登录Token (Facebook Access Token)
account_typestring必填账号类型 (PN_ACCOUNT_FACEBOOK = "FACEBOOK")

响应数据

Res结构体

字段类型说明
TokenFSerializeTokenDataToken信息
PlayerFSerializePlayerData玩家信息

FSerializeTokenData 结构

字段类型说明
AccessTokenFString访问Token
RefreshTokenFString刷新Token

FSerializePlayerData 结构

字段类型说明
UserUniqueIDFString用户唯一ID
OpenIDFStringOpen ID
NicknameFString昵称
LinkedIDFString关联ID
LinkedTypeFString关联类型
PurchaseCountint32购买次数
PurchaseCurrencyCodeFString购买货币代码
PurchaseTotalPricedouble总购买金额
PurchaseVoidedCountint32退款次数
PurchaseVoidedCurrencyCodeFString退款货币代码
PurchaseVoidedTotalPricedouble总退款金额
CountryFString国家
TimezoneFString时区
Offsetint32时间偏移
JoinPeriodint32注册时长

Unreal C++实现

// FacebookSignInExample.h
#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "FacebookSignInExample.generated.h"

UCLASS()
class YOURPROJECT_API AFacebookSignInExample : public AActor
{
GENERATED_BODY()

public:
AFacebookSignInExample();

UFUNCTION(BlueprintCallable, Category = "PlayNANOO|Account")
void FacebookSignIn();

private:
void OnFBInitComplete();
void OnFBHideUnity(bool bIsShow);
void FacebookAuthCallback(bool bWasSuccessful, const FString& AccessToken);
void SocialSignin(const FString& Token);
};

// FacebookSignInExample.cpp
#include "FacebookSignInExample.h"
#include "OnlineSubsystem.h"
#include "OnlineSubsystemFacebook.h"
#include "Interfaces/OnlineIdentityInterface.h"
#include "Interfaces/OnlineExternalUIInterface.h"

AFacebookSignInExample::AFacebookSignInExample()
{
PrimaryActorTick.bCanEverTick = false;
}

void AFacebookSignInExample::FacebookSignIn()
{
IOnlineSubsystem* OnlineSubsystem = IOnlineSubsystem::Get(FACEBOOK_SUBSYSTEM);
if (OnlineSubsystem)
{
IOnlineIdentityPtr Identity = OnlineSubsystem->GetIdentityInterface();
if (Identity.IsValid())
{
FOnLoginCompleteDelegate LoginDelegate = FOnLoginCompleteDelegate::CreateLambda(
[this](int32 LocalUserNum, bool bWasSuccessful, const FUniqueNetId& UserId, const FString& Error)
{
if (bWasSuccessful)
{
// Facebook Access Token 획득
IOnlineSubsystem* OnlineSubsystem = IOnlineSubsystem::Get(FACEBOOK_SUBSYSTEM);
if (OnlineSubsystem)
{
IOnlineIdentityPtr Identity = OnlineSubsystem->GetIdentityInterface();
if (Identity.IsValid())
{
FString AccessToken = Identity->GetAuthToken(LocalUserNum);
FacebookAuthCallback(true, AccessToken);
}
}
}
else
{
FacebookAuthCallback(false, FString());
UE_LOG(LogTemp, Error, TEXT("Facebook 인증 실패: %s"), *Error);
}
}
);

Identity->AddOnLoginCompleteDelegate_Handle(0, LoginDelegate);

// 요청할 권한 설정
FOnlineAccountCredentials Credentials;
Credentials.Type = TEXT("facebook");
Credentials.Id = TEXT("public_profile,email");

Identity->Login(0, Credentials);
}
}
}

void AFacebookSignInExample::FacebookAuthCallback(bool bWasSuccessful, const FString& AccessToken)
{
if (bWasSuccessful)
{
// SocialSignin API 호출
SocialSignin(AccessToken);
}
else
{
UE_LOG(LogTemp, Warning, TEXT("Login Cancel"));
}
}

void AFacebookSignInExample::SocialSignin(const FString& Token)
{
// SocialSignIn(Token, TEXT("FACEBOOK"));
UE_LOG(LogTemp, Log, TEXT("Facebook Access Token: %s"), *Token);
}

使用方法

1. 开始Facebook登录

void UYourClass::StartFacebookSignIn()
{
AFacebookSignInExample* FacebookSignIn = GetWorld()->SpawnActor<AFacebookSignInExample>();
if (FacebookSignIn)
{
FacebookSignIn->FacebookSignIn();
}
}

2. 通过Token关联账号

认证完成后,使用SocialSignin方法中收到的token调用PlayNANOO API:

新登录(SocialSignIn)

void UYourClass::SocialSignIn(const FString& Token, const FString& AccountType)
{
// Facebook 계정으로 처음 로그인
// AccountType: "FACEBOOK"
}
参考
Online Subsystem Facebook

要使用Unreal Engine的Online Subsystem Facebook,需要在项目设置中激活并设置Facebook App ID。详细内容请参阅Unreal Engine官方文档。