[flutter] Firebase_core를 사용하여 플러터 앱에서 Firebase 인앱 결제 구현하기

소개

Firebase는 Google의 개발 플랫폼으로서, 다양한 기능을 제공합니다. 그 중 Firebase 인앱 결제는 모바일 앱에서 구매 및 결제 기능을 쉽게 구현할 수 있도록 도와줍니다. 이번 포스트에서는 Firebase_core 패키지를 사용하여 플러터 앱에서 Firebase 인앱 결제를 구현하는 방법에 대해 알아보겠습니다.

Firebase_core 설정

Firebase_core는 Firebase의 중심 패키지로, 앱에서 Firebase를 사용하기 위해 필요한 초기 설정을 해줍니다. 우선 Firebase Console에서 프로젝트를 생성하고 Firebase에 앱을 추가해야 합니다. 그리고 firebase_core 패키지를 pubspec.yaml 파일에 추가하고, Firebase 인증 파일을 프로젝트에 추가해야 합니다.

Firebase 인앱 결제 구현

Firebase 인앱 결제를 구현하기 위해 다음 단계를 따라야 합니다.

1. billing_client 패키지 추가

플러터 앱에서 Firebase 인앱 결제를 사용하기 위해서는 billing_client 패키지를 추가해야 합니다. pubspec.yaml 파일에 다음 코드를 추가해주세요.

dependencies:
  flutter:
    sdk: flutter
  firebase_core: ^1.0.0
  billing_client: ^4.0.0

2. Firebase_core 초기화

Firebase_core 패키지를 사용하려면 먼저 Firebase를 초기화해야 합니다. Firebase 초기화는 앱이 실행되는 곳의 main.dart 파일에서 수행합니다.

import 'package:firebase_core/firebase_core.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  
  runApp(MyApp());
}

3. 결제 요청

인앱 결제를 요청하기 위해서는 소비품 목록을 작성하고, 구매를 처리할 함수를 작성해야 합니다.

import 'package:billing_client/billing_client.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';

Future<void> initPlatformState() async {
  final client = BillingClient((await Firebase.initializeApp()).options);
  await client.startConnection(
    onBillingServiceDisconnected: () {
      // 연결이 해제될 때 호출될 콜백 함수 작성
    },
  );
  
  final isReady = await client.isReady();
  if (isReady) {
    final skuDetailsResponse = await client.querySkuDetails(
      skuDetailsParams: SkuDetailsParams(
        skusList: ["product_id"],
        type: SkuType.inapp, // 소비품인 경우 SkuType.subs 대신 SkuType.inapp 사용
      ),
    );
    
    if (skuDetailsResponse != null) {
      final productDetails = skuDetailsResponse.billingResult.responseCode;
      if (productDetails == BillingResponse.ok) {
        final skuDetails = skuDetailsResponse.skuDetailsList;
        // 인앱 결제 처리를 위한 로직 작성
      }
    }
  }
  
  await client.endConnection();
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Firebase In-App Purchase',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Firebase In-App Purchase'),
        ),
        body: Center(
          child: ElevatedButton(
            child: Text('구매하기'),
            onPressed: () {
              initPlatformState();
            },
          ),
        ),
      ),
    );
  }
}

결론

이러한 방법을 사용하여 플러터 앱에서 Firebase 인앱 결제를 구현할 수 있습니다. Firebase_core를 초기화하고 billing_client 패키지를 추가하여 인앱 결제 요청을 처리하는 로직을 작성하면 됩니다. Firebase Console에서 상품을 추가하고 상품 ID를 결제 처리 로직에도 추가해야 합니다. 이제 Firebase 인앱 결제를 사용하여 플러터 앱에 결제 기능을 손쉽게 추가할 수 있습니다.

참고자료