nestads_dev 1.0.6
nestads_dev: ^1.0.6 copied to clipboard
A Flutter project built as a data tracker SDK for tracking and managing data in real-time.
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:nestads_dev/nestads_dev.dart';
import 'package:visibility_detector/visibility_detector.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 초기화시 userId, deviceInfo를 모두 채워주세요.
await NestAds.instance
.initialize(userId: '6fbfb26a-fdff-40ff-9722-269def2e72ad', deviceInfo: {
'osName': 'Android',
'deviceBrand': 'samsung',
'deviceModel': 'SM-S926N',
});
// 트래킹 적재 사이즈, 시간 설정
// 해당 메서드를 호출하지 않을 않은 경우 디폴트 값으로 10개, 5초로 설정됩니다.
NestAds.instance.setTrackingLogOptions(size: 10, duration: 5);
runApp(SampleApp());
}
class SampleApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomePage(),
);
}
}
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('NestAds')),
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => AdsPage()),
);
},
child: Text('이벤트 페이지로 이동'),
),
),
);
}
}
class AdsPage extends StatelessWidget {
final List<Map<String, dynamic>> events = List.generate(
100,
(index) {
return {
'request_id': index.toString(),
'event_id': index.toString(),
'placement_id': index.toString(),
"impression_order": index + 1,
'misc': {
"request_id": index.toString(),
"impression_order": index + 1,
"model_version": "v1",
"score": 0.123
}
};
},
);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('이벤트 페이지')),
body: GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: 1.0,
mainAxisSpacing: 50.0,
),
itemCount: events.length,
itemBuilder: (context, index) {
final event = events[index];
return VisibilityDetector(
key: Key('ad-${event['event_id']}'),
onVisibilityChanged: (visibilityInfo) {
if (visibilityInfo.visibleFraction >= 0.5) {
if (index < 50) {
// 랭커 응답을 통한 이벤트 로그 수집 예제
NestAds.instance.sendTrackingLog(
type: 'VIEW',
eventId: event['event_id'],
placementId: event['placement_id'],
misc: event['misc'],
);
} else {
// 랭커 응답을 통하지 않은 이벤트 로그 수집 예제
NestAds.instance.sendTrackingLog(
type: 'VIEW',
requestId: event['request_id'],
eventId: event['event_id'],
placementId: event['placement_id'],
impressionOrder: event['impression_order']);
}
}
},
child: GestureDetector(
onTap: () {
// 이벤트 클릭 시 ENTER 트래킹
if (index < 50) {
// 랭커 응답을 통한 이벤트 로그 수집 예제
NestAds.instance.sendTrackingLog(
type: 'ENTER',
eventId: event['event_id'],
placementId: event['placement_id'],
misc: event['misc']);
} else {
// 랭커 응답을 통하지 않은 이벤트 로그 수집 예제
NestAds.instance.sendTrackingLog(
type: 'ENTER',
requestId: event['request_id'],
eventId: event['event_id'],
placementId: event['placement_id'],
impressionOrder: event['impression_order']);
}
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => AdDetailPage(event: event)),
);
},
child: Container(
margin: EdgeInsets.all(8.0),
color: Colors.blueAccent,
child: Center(
child: Text(
'이벤트 \n${event['event_id']}',
style: TextStyle(color: Colors.white, fontSize: 20),
),
),
),
),
);
},
),
);
}
}
class AdDetailPage extends StatelessWidget {
final Map<String, dynamic> event;
AdDetailPage({required this.event});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('이벤트 상세 페이지')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'이벤트 ${event['event_id']} \n',
style: TextStyle(fontSize: 24),
textAlign: TextAlign.center,
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
int eventId = int.parse(event['event_id']);
// INPROGRESS 트래킹
if (eventId < 50) {
// 랭커 응답을 통한 이벤트 로그 수집 예제
NestAds.instance.sendTrackingLog(
type: 'INPROGRESS',
eventId: event['event_id'],
placementId: event['placement_id'],
misc: event['misc'],
);
} else {
// 랭커 응답을 통하지 않은 이벤트 로그 수집 예제
NestAds.instance.sendTrackingLog(
type: 'INPROGRESS',
requestId: event['request_id'],
eventId: event['event_id'],
placementId: event['placement_id'],
impressionOrder: event['impression_order']);
}
},
child: Text('INPROGRESS 참여 트래킹'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
int eventId = int.parse(event['event_id']);
// COMPLETE 트래킹
if (eventId < 50) {
// 랭커 응답을 통한 이벤트 로그 수집 예제
NestAds.instance.sendTrackingLog(
type: 'COMPLETE',
eventId: event['event_id'],
placementId: event['placement_id'],
misc: event['misc'],
);
} else {
// 랭커 응답을 통하지 않은 이벤트 로그 수집 예제
NestAds.instance.sendTrackingLog(
type: 'COMPLETE',
requestId: event['request_id'],
eventId: event['event_id'],
placementId: event['placement_id'],
impressionOrder: event['impression_order']);
}
},
child: Text('COMPLETE 보상 트래킹'),
),
],
),
),
);
}
}