nestads_dev 1.0.6 copy "nestads_dev: ^1.0.6" to clipboard
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 보상 트래킹'),
            ),
          ],
        ),
      ),
    );
  }
}
2
likes
125
points
59
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter project built as a data tracker SDK for tracking and managing data in real-time.

Homepage

Documentation

API reference

License

MIT (license)

Dependencies

archive, convert, crypto, encrypt, flutter, http, package_info_plus, shared_preferences, synchronized, timezone

More

Packages that depend on nestads_dev