본문 바로가기
Flutter

Flutter 앱에서 구독 모델 구현하기: 알람 앱에서 재정적 수익 창출하기

by 난타코다옹 2023. 10. 3.

목차

    Flutter로 앱을 개발하고 있다면, 앱에서 수익을 창출하는 방법을 고민하게 되죠?!

    이번 글에서는 알람 앱을 예시로 들어, 구독 모델을 구현하는 방법에 대해 알아보겠습니다.

    1. Firebase 구성
      Firebase를 사용하여 앱에서 구독 모델을 구현하려면, Firebase Console에서 구성해야 할 몇 가지 설정이 있습니다. 먼저, Firebase Authentication을 사용하여 사용자 계정을 만들고, Firebase Cloud Firestore를 사용하여 사용자의 구독 상태를 저장해야 합니다.
    2. 구독 상태 관리
      Flutter에서는 Provider 패키지를 사용하여 상태 관리를 할 수 있습니다. 이를 사용하여, 사용자의 구독 상태를 관리하고, 해당 상태에 따라 앱에서 특정 기능을 제한할 수 있습니다. 아래는 Provider 패키지를 사용하여 구독 상태를 관리하는 예시 코드입니다.
    import 'package:flutter/material.dart';
    import 'package:provider/provider.dart';
    
    enum SubscriptionStatus { free, basic, premium }
    
    class SubscriptionModel with ChangeNotifier {
      SubscriptionStatus _status = SubscriptionStatus.free;
    
      SubscriptionStatus get status => _status;
    
      set status(SubscriptionStatus value) {
        _status = value;
        notifyListeners();
      }
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return ChangeNotifierProvider(
          create: (context) => SubscriptionModel(),
          child: MaterialApp(
            home: HomePage(),
          ),
        );
      }
    }
    
    class HomePage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        final subscription = Provider.of<SubscriptionModel>(context);
    
        return Scaffold(
          appBar: AppBar(
            title: Text('My App'),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Text('Your subscription status is: ${subscription.status}'),
                ElevatedButton(
                  onPressed: () {
                    subscription.status = SubscriptionStatus.basic;
                  },
                  child: Text('Upgrade to Basic'),
                ),
                ElevatedButton(
                  onPressed: () {
                    subscription.status = SubscriptionStatus.premium;
                  },
                  child: Text('Upgrade to Premium'),
                ),
              ],
            ),
          ),
        );
      }
    }

    위 코드에서는 SubscriptionModel 클래스를 만들어, 사용자의 구독 상태를 관리합니다. 또한, HomePage 위젯에서 Provider 패키지를 사용하여 해당 상태를 가져와, 상태에 따라 다른 버튼을 보여줍니다.

    1. 구독 처리
      사용자가 구독을 신청하면, 해당 구독을 처리해야 합니다. 이를 위해서는 결제 처리 API를 사용해야 합니다. 여기서는 Stripe API를 사용하여 구독 처리를 구현해보겠습니다. 아래는 Stripe API를 사용하여 구독 처리를 구현하는 예시 코드입니다.
    import 'package:http/http.dart' as http;
    
    class SubscriptionService {
      static const _apiKey = 'your-stripe-api-key';
    
      static Future<void> subscribe(String customerId, String planId) async {
        final url = 'https://api.stripe.com/v1/subscriptions';
    
        final response = await http.post(
          Uri.parse(url),
          headers: {
            'Authorization': 'Bearer $_apiKey',
            'Content-Type': 'application/x-www-form-urlencoded',
          },
          body: {
            'customer': customerId,
            'items[0][plan]': planId,
          },
        );
    
        if (response.statusCode == 200) {
          print('Subscription successful!');
        } else {
          print('Subscription failed.');
        }
      }
    }

    위 코드에서는 Stripe API를 사용하여, 사용자의 구독을 처리합니다. subscribe 메소드에서는 customerId와 planId를 매개변수로 받아, 해당 정보를 Stripe API로 전송합니다. 전송 결과에 따라 구독 처리가 성공했는지 여부를 출력합니다.

     

    app subscription

    이번 글에서는 Flutter 앱에서 구독 모델을 구현하는 방법에 대해 알아보았습니다. Firebase와 Provider 패키지를 사용하여, 사용자의 구독 상태를 관리하고, Stripe API를 사용하여 구독 처리를 구현하는 방법을 살펴보았습니다. 이제 여러분도 구독 모델을 구현하여, 앱에서 재정적 수익을 창출해보세요!