728x90
반응형
728x90
- 주제
>> Firebase 프로젝트 생성
>> Firebase Realtime Database 설정
>> 유니티 프로젝트에 Firebase 추가
>> 쿠폰 검증 및 보상 지급 구현
>> 관리자용 쿠폰 추가 기능
>> 보안 규칙 설정
- 공부내용
1. Firebase 프로젝트 생성
- Firebase 콘솔로 이동: Firebase Console에 접속.
- 새 프로젝트 만들기:
- "프로젝트 추가" 버튼 클릭.
- 프로젝트 이름 입력 (예: CouponManager).
- Google Analytics는 선택사항이니 필요 없으면 비활성화.
- "프로젝트 만들기" 클릭.
2. Firebase Realtime Database 설정
쿠폰 데이터를 저장하고 관리하기 위해 Realtime Database를 사용한다.
- Realtime Database 활성화:
- Firebase 콘솔에서 Build > Realtime Database로 이동.
- "데이터베이스 만들기" 버튼 클릭.
- 위치 설정(예: asia-east1 등, 가까운 위치 선택).
- "시작 모드"에서 테스트 모드 선택 (초기 설정을 위해 사용).테스트 모드에서는 인증 없이 데이터베이스에 접근 가능하지만, 이후 보안 규칙을 설정해야 한다.
- 데이터베이스 구조 설계:
- Firebase 데이터는 JSON 트리 구조로 저장된다.
- 쿠폰 데이터를 다음과 같이 저장할 예정이다:
json
{
"coupons": {
"TEST123": {
"reward": "100 Gold",
"isUsed": false
},
"COUPON456": {
"reward": "50 Diamonds",
"isUsed": false
}
}
}
3. 유니티 프로젝트에 Firebase 추가
- Firebase SDK 다운로드:
- Firebase Unity SDK를 다운로드.
- 프로젝트에 SDK를 추가(다운로드한 .unitypackage 파일을 유니티 프로젝트에 임포트).
- Firebase 초기화:
- Firebase를 사용하려면 유니티에서 Firebase 초기화가 필요하다.
using Firebase;
using Firebase.Database;
using Firebase.Extensions;
using UnityEngine;
public class FirebaseInit : MonoBehaviour
{
private void Start()
{
FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task =>
{
if (task.Result == DependencyStatus.Available)
{
Debug.Log("Firebase initialized successfully.");
}
else
{
Debug.LogError("Firebase initialization failed.");
}
});
}
}
이 스크립트를 빈 GameObject에 추가하여 Firebase를 초기화한다.
4. 쿠폰 검증 및 보상 지급 구현
사용자가 입력한 쿠폰 번호를 Firebase에서 확인한다.
using Firebase.Database;
using Firebase.Extensions;
using UnityEngine;
using UnityEngine.UI;
public class CouponManager : MonoBehaviour
{
public InputField couponInputField;
public Text resultText;
private DatabaseReference dbReference;
private void Start()
{
dbReference = FirebaseDatabase.DefaultInstance.RootReference;
}
public void OnSubmitCoupon()
{
string couponCode = couponInputField.text;
// Firebase에서 쿠폰 데이터 확인
dbReference.Child("coupons").Child(couponCode).GetValueAsync().ContinueWithOnMainThread(task =>
{
if (task.IsFaulted)
{
resultText.text = "오류가 발생했습니다.";
}
else if (task.IsCompleted)
{
DataSnapshot snapshot = task.Result;
if (snapshot.Exists)
{
bool isUsed = snapshot.Child("isUsed").Value as bool? ?? false;
if (isUsed)
{
resultText.text = "이미 사용된 쿠폰입니다.";
}
else
{
string reward = snapshot.Child("reward").Value.ToString();
resultText.text = $"쿠폰 적용 성공! 보상: {reward}";
// 쿠폰 사용 상태 업데이트
dbReference.Child("coupons").Child(couponCode).Child("isUsed").SetValueAsync(true);
}
}
else
{
resultText.text = "유효하지 않은 쿠폰입니다.";
}
}
});
}
}
5. 관리자용 쿠폰 추가 기능
관리자가 Firebase에 쿠폰을 직접 추가할 수 있도록 Firebase 콘솔을 사용하거나,
Unity에서 직접 추가하는 방법을 구현할 수 있다.
5-1. Firebase 콘솔에서 직접 추가
- 데이터베이스 > 데이터로 이동.
- JSON 트리에서 새로운 쿠폰을 추가:
json
{
"coupons": {
"NEWCOUPON789": {
"reward": "200 Coins",
"isUsed": false
}
}
}
5-2. Unity에서 동적으로 쿠폰 추가
public void AddCoupon(string couponCode, string reward)
{
dbReference.Child("coupons").Child(couponCode).SetRawJsonValueAsync(JsonUtility.ToJson(new
{
reward = reward,
isUsed = false
})).ContinueWithOnMainThread(task =>
{
if (task.IsCompleted)
{
Debug.Log($"쿠폰 {couponCode}가 성공적으로 추가되었습니다.");
}
else
{
Debug.LogError("쿠폰 추가 실패.");
}
});
}
6. 보안 규칙 설정
테스트가 끝난 후, 보안을 강화하기 위해 Realtime Database의 보안 규칙을 설정한다.
예제 규칙:
json
{
"rules": {
"coupons": {
".read": true,
".write": false,
"$couponCode": {
".validate": "newData.child('isUsed').isBoolean() && newData.child('reward').isString()"
}
}
}
}
- .read: 읽기 권한 (모든 사용자가 쿠폰 데이터 읽기 가능).
- .write: 쓰기 권한 (관리자만 추가 가능).
반응형
728x90
반응형
'🌐 유니티 (Unity)' 카테고리의 다른 글
Day 64 - Unity 텍스트 색상 변경 및 기본 기능 확장 방법 🎨 (11) | 2025.01.04 |
---|---|
Day 62 - Firebase 보안 규칙 설정과 최적화 방법 🛡️ (12) | 2024.12.27 |
Day 61 - Firebase에서 데이터 불러오고 업데이트 (2) | 2024.12.23 |
Day 60 - Firebase를 활용해 사용자 게임 데이터 저장 (0) | 2024.12.19 |
Day 59 - 유니티 구글 계정 로그인 시스템 실행(2부) (2) | 2024.12.15 |