오늘은 플러터 앱에서 AdMob API를 사용하여 광고 수익 정보를 조회하고 표시하는 방법에 대해 알아보겠습니다.
1. 준비 단계
먼저, pubspec.yaml 파일에 필요한 패키지를 추가합니다
dependencies:
flutter:
sdk: flutter
http: ^latest_version
intl: ^latest_version
2. AdMob API 인증 설정
AdMob API를 사용하기 위해서는 Google Cloud Console에서 프로젝트를 설정하고 서비스 계정 키를 생성해야 합니다.
이 과정은 다음과 같습니다
a. Google Cloud Console에서 새 프로젝트를 생성합니다.
b. AdMob API를 활성화합니다.
c. 서비스 계정을 생성하고 JSON 키 파일을 다운로드합니다.
d. AdMob 계정에서 이 서비스 계정에 대한 권한을 부여합니다.
3. API 호출 함수 구현
admob_service.dart 파일을 생성하고 다음 코드를 추가합니다
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:intl/intl.dart';
class AdMobService {
final String _baseUrl = 'https://admob.googleapis.com/v1/accounts/';
final String _accountId = 'YOUR_ACCOUNT_ID';
final String _accessToken = 'YOUR_ACCESS_TOKEN';
Future<Map<String, dynamic>> getEarnings() async {
final now = DateTime.now();
final today = DateFormat('yyyy-MM-dd').format(now);
final tomorrow = DateFormat('yyyy-MM-dd').format(now.add(Duration(days: 1)));
final firstDayOfMonth = DateTime(now.year, now.month, 1);
final lastDayOfMonth = DateTime(now.year, now.month + 1, 0);
final response = await http.get(
Uri.parse('$_baseUrl$_accountId/networkReport:generate'),
headers: {
'Authorization': 'Bearer $_accessToken',
'Content-Type': 'application/json',
},
body: jsonEncode({
'reportSpec': {
'dateRange': {
'startDate': {'year': firstDayOfMonth.year, 'month': firstDayOfMonth.month, 'day': firstDayOfMonth.day},
'endDate': {'year': lastDayOfMonth.year, 'month': lastDayOfMonth.month, 'day': lastDayOfMonth.day},
},
'metrics': ['ESTIMATED_EARNINGS'],
'dimensions': ['DATE'],
},
}),
);
if (response.statusCode == 200) {
final data = jsonDecode(response.body);
final rows = data['rows'] ?? [];
double todayEarnings = 0;
double tomorrowEarnings = 0;
double monthEarnings = 0;
for (var row in rows) {
final date = row['dimensionValues'][0]['value'];
final earnings = double.parse(row['metricValues'][0]['microsValue']) / 1000000;
if (date == today) {
todayEarnings = earnings;
} else if (date == tomorrow) {
tomorrowEarnings = earnings;
}
monthEarnings += earnings;
}
return {
'today': todayEarnings,
'tomorrow': tomorrowEarnings,
'month': monthEarnings,
};
} else {
throw Exception('Failed to load earnings data');
}
}
}
4. UI 구현
earnings_screen.dart 파일을 생성하고 다음과 같이 구현합니다
import 'package:flutter/material.dart';
import 'admob_service.dart';
class EarningsScreen extends StatefulWidget {
@override
_EarningsScreenState createState() => _EarningsScreenState();
}
class _EarningsScreenState extends State<EarningsScreen> {
final AdMobService _adMobService = AdMobService();
Map<String, dynamic> _earnings = {};
bool _isLoading = false;
@override
void initState() {
super.initState();
_loadEarnings();
}
Future<void> _loadEarnings() async {
setState(() {
_isLoading = true;
});
try {
final earnings = await _adMobService.getEarnings();
setState(() {
_earnings = earnings;
_isLoading = false;
});
} catch (e) {
setState(() {
_isLoading = false;
});
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('수익 정보를 불러오는데 실패했습니다.')),
);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('AdMob 수익')),
body: _isLoading
? Center(child: CircularProgressIndicator())
: Padding(
padding: EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('오늘 수익: \$${_earnings['today']?.toStringAsFixed(2) ?? '0.00'}'),
SizedBox(height: 8),
Text('내일 예상 수익: \$${_earnings['tomorrow']?.toStringAsFixed(2) ?? '0.00'}'),
SizedBox(height: 8),
Text('이번 달 수익: \$${_earnings['month']?.toStringAsFixed(2) ?? '0.00'}'),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _loadEarnings,
child: Icon(Icons.refresh),
),
);
}
}
5. 주의사항
- AdMob API는 실시간 데이터를 제공하지 않습니다. 대신 전날까지의 데이터를 제공합니다.
- API 사용량에 제한이 있으므로, 너무 자주 요청하지 않도록 주의해야 합니다.
- 실제 앱에서는 액세스 토큰을 안전하게 관리해야 합니다. 서버 사이드에서 토큰을 관리하고 API 요청을 처리하는 것이 좋습니다.
- AdMob의 정책을 준수해야 하며, 수익 정보를 공개적으로 표시하는 것은 권장되지 않습니다.
이렇게 구현하면 플러터 앱에서 AdMob API를 사용하여 오늘, 내일, 이번 달의 광고 수익 정보를 조회하고 표시할 수 있습니다.
이 기능은 개발자가 자신의 앱 수익을 모니터링하는 데 유용하게 사용될 수 있습니다.
AdMob API를 사용할 때는 항상 최신 문서를 참조하고, Google의 정책을 준수해야 합니다.
또한, 사용자의 개인정보를 보호하고 보안을 유지하는 것이 중요합니다.
추가 질문이나 설명이 필요한 부분이 있으면 언제든 물어보세요!
Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.
'Flutter > Snippet' 카테고리의 다른 글
플러터 앱에 Firebase를 이용하여 사용자 정보 관리 기능 추가하기 (6) | 2024.08.29 |
---|---|
플러터에서 텍스트 타이핑 효과를 내는 위젯: 자세한 가이드 (0) | 2024.08.12 |
플러터에서 효과적인 스타일 관리: FontSizeCollection과 ColorsCollection 활용법 (0) | 2024.07.28 |
플러터 게시판에서 멀티이미지 업데이트 구현하기: 심층 가이드 (0) | 2024.07.26 |
현재 위치를 한국어로 표현하기: OpenWeatherMap API 활용 (0) | 2024.07.18 |