@apps-in-toss/native-modules 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +107 -29
- package/dist/index.d.cts +464 -138
- package/dist/index.d.ts +464 -138
- package/dist/index.js +84 -7
- package/package.json +2 -2
- package/src/AppsInTossModule/native-event-emitter/appsInTossEvent.ts +2 -0
- package/src/AppsInTossModule/native-event-emitter/event-plugins/HomeIconButtonClickHandleEvent.ts +10 -0
- package/src/AppsInTossModule/native-event-emitter/index.ts +1 -0
- package/src/AppsInTossModule/native-modules/ads/googleAdMob.ts +158 -167
- package/src/AppsInTossModule/native-modules/ads/googleAdMobV2.ts +363 -0
- package/src/AppsInTossModule/native-modules/ads/types.ts +17 -0
- package/src/AppsInTossModule/native-modules/index.ts +22 -4
package/dist/index.d.cts
CHANGED
|
@@ -314,6 +314,12 @@ declare class EntryMessageExitedEvent extends GraniteEventDefinition<undefined,
|
|
|
314
314
|
listener(_: undefined): void;
|
|
315
315
|
}
|
|
316
316
|
|
|
317
|
+
declare class HomeIconButtonClickHandleEvent extends GraniteEventDefinition<undefined, undefined> {
|
|
318
|
+
name: "homeIconButtonClickEvent";
|
|
319
|
+
remove(): void;
|
|
320
|
+
listener(_: undefined): void;
|
|
321
|
+
}
|
|
322
|
+
|
|
317
323
|
interface StartUpdateLocationOptions {
|
|
318
324
|
/**
|
|
319
325
|
* 위치 정확도를 설정해요.
|
|
@@ -363,7 +369,7 @@ declare class VisibilityChangedByTransparentServiceWebEvent extends GraniteEvent
|
|
|
363
369
|
private isVisibilityChangedByTransparentServiceWebResult;
|
|
364
370
|
}
|
|
365
371
|
|
|
366
|
-
declare const appsInTossEvent: GraniteEvent<EntryMessageExitedEvent | UpdateLocationEvent | AppBridgeCallbackEvent | VisibilityChangedByTransparentServiceWebEvent>;
|
|
372
|
+
declare const appsInTossEvent: GraniteEvent<EntryMessageExitedEvent | HomeIconButtonClickHandleEvent | UpdateLocationEvent | AppBridgeCallbackEvent | VisibilityChangedByTransparentServiceWebEvent>;
|
|
367
373
|
|
|
368
374
|
declare function onVisibilityChangedByTransparentServiceWeb(eventParams: {
|
|
369
375
|
options: {
|
|
@@ -373,6 +379,24 @@ declare function onVisibilityChangedByTransparentServiceWeb(eventParams: {
|
|
|
373
379
|
onError: (error: unknown) => void;
|
|
374
380
|
}): () => void;
|
|
375
381
|
|
|
382
|
+
interface AppBridgeCompatCallbacks<Result> {
|
|
383
|
+
onSuccess: (result: Result) => void;
|
|
384
|
+
onError: (reason: unknown) => void;
|
|
385
|
+
}
|
|
386
|
+
type AppBridgeCallback = (...args: any[]) => void;
|
|
387
|
+
declare function invokeAppBridgeCallback(id: string, ...args: any[]): boolean;
|
|
388
|
+
declare function invokeAppBridgeMethod<Result = any, Params = any>(methodName: string, params: Params, callbacks: AppBridgeCompatCallbacks<Result> & Record<string, AppBridgeCallback>): () => void;
|
|
389
|
+
declare function registerCallback(callback: AppBridgeCallback, name?: string): string;
|
|
390
|
+
declare function unregisterCallback(id: string): void;
|
|
391
|
+
declare function getCallbackIds(): string[];
|
|
392
|
+
declare const INTERNAL__appBridgeHandler: {
|
|
393
|
+
invokeAppBridgeCallback: typeof invokeAppBridgeCallback;
|
|
394
|
+
invokeAppBridgeMethod: typeof invokeAppBridgeMethod;
|
|
395
|
+
registerCallback: typeof registerCallback;
|
|
396
|
+
unregisterCallback: typeof unregisterCallback;
|
|
397
|
+
getCallbackIds: typeof getCallbackIds;
|
|
398
|
+
};
|
|
399
|
+
|
|
376
400
|
/**
|
|
377
401
|
* @public
|
|
378
402
|
* @category 광고
|
|
@@ -422,6 +446,13 @@ type AdImpression = {
|
|
|
422
446
|
type AdShow = {
|
|
423
447
|
type: 'show';
|
|
424
448
|
};
|
|
449
|
+
type AdUserEarnedReward = {
|
|
450
|
+
type: 'userEarnedReward';
|
|
451
|
+
data: {
|
|
452
|
+
unitType: string;
|
|
453
|
+
unitAmount: number;
|
|
454
|
+
};
|
|
455
|
+
};
|
|
425
456
|
interface AdMobHandlerParams<Options = void, Event = AdMobFullScreenEvent> {
|
|
426
457
|
options: Options;
|
|
427
458
|
onEvent: (event: Event) => void;
|
|
@@ -483,6 +514,20 @@ interface RewardedAd {
|
|
|
483
514
|
adUnitId: string;
|
|
484
515
|
responseInfo: ResponseInfo;
|
|
485
516
|
}
|
|
517
|
+
/**
|
|
518
|
+
* @public
|
|
519
|
+
* @category 광고
|
|
520
|
+
* @name AdMobLoadResult
|
|
521
|
+
* @description 광고의 ID와 응답 정보를 담고 있는 객체예요. 광고를 로드한 뒤, 관련 정보를 확인할 때 유용해요.
|
|
522
|
+
* @property {string} adGroupId 광고 그룹 ID예요.
|
|
523
|
+
* @property {string} adUnitId 광고 ID예요.
|
|
524
|
+
* @property {ResponseInfo} responseInfo 광고 로드 응답 정보예요. 자세한 내용은 [ResponseInfo](/react-native/reference/native-modules/광고/ResponseInfo.html)를 참고하세요.
|
|
525
|
+
*/
|
|
526
|
+
interface AdMobLoadResult {
|
|
527
|
+
adGroupId: string;
|
|
528
|
+
adUnitId: string;
|
|
529
|
+
responseInfo: ResponseInfo;
|
|
530
|
+
}
|
|
486
531
|
|
|
487
532
|
interface LoadAdMobInterstitialAdOptions {
|
|
488
533
|
/**
|
|
@@ -511,16 +556,10 @@ type LoadAdMobInterstitialAdParams = AdMobHandlerParams<LoadAdMobInterstitialAdO
|
|
|
511
556
|
* @public
|
|
512
557
|
* @category 광고
|
|
513
558
|
* @name loadAdMobInterstitialAd
|
|
514
|
-
* @
|
|
515
|
-
* @param {LoadAdMobInterstitialAdParams} params 광고를 불러올 때 사용할 설정 값이에요. 광고 ID와 광고의 동작에 대한 콜백을 설정할 수 있어요.
|
|
516
|
-
* @param {LoadAdMobInterstitialAdOptions} params.options 광고를 불러올 때 전달할 옵션 객체예요.
|
|
517
|
-
* @param {string} params.options.adUnitId 광고 단위 ID예요. 발급받은 전면 광고용 ID를 입력해요.
|
|
518
|
-
* @param {(event: LoadAdMobInterstitialAdEvent) => void} [params.onEvent] 광고 관련 이벤트가 발생했을 때 호출돼요. (예시: 광고가 닫히거나 클릭됐을 때). 자세한 이벤트 타입은 [LoadAdMobInterstitialAdEvent](/react-native/reference/native-modules/광고/LoadAdMobInterstitialAdEvent.html)를 참고하세요.
|
|
519
|
-
* @param {(reason: unknown) => void} [params.onError] 광고를 불러오지 못했을 때 호출돼요. (예시: 네트워크 오류나 지원하지 않는 환경일 때)
|
|
520
|
-
* @property {() => boolean} [isSupported] 현재 실행 중인 앱(예: 토스 앱, 개발용 샌드박스 앱 등)에서 Google AdMob 광고 기능을 지원하는지 확인하는 함수예요. 기능을 사용하기 전에 지원 여부를 확인해야 해요.
|
|
559
|
+
* @deprecated 이 함수는 더 이상 사용되지 않습니다. 대신 {@link GoogleAdMob.loadAppsInTossAdMob}를 사용해주세요.
|
|
521
560
|
*
|
|
522
561
|
* @example
|
|
523
|
-
* ### 버튼 눌러 불러온
|
|
562
|
+
* ### 버튼 눌러 불러온 광고 보여주기 (loadAppsInTossAdMob로 변경 예제)
|
|
524
563
|
* ```tsx
|
|
525
564
|
* import { GoogleAdMob } from '@apps-in-toss/framework';
|
|
526
565
|
* import { useFocusEffect } from '@granite-js/native/@react-navigation/native';
|
|
@@ -528,20 +567,20 @@ type LoadAdMobInterstitialAdParams = AdMobHandlerParams<LoadAdMobInterstitialAdO
|
|
|
528
567
|
* import { useCallback, useState } from 'react';
|
|
529
568
|
* import { Button, Text, View } from 'react-native';
|
|
530
569
|
*
|
|
531
|
-
* const
|
|
570
|
+
* const AD_GROUP_ID = '<AD_GROUP_ID>';
|
|
532
571
|
*
|
|
533
|
-
* export function
|
|
572
|
+
* export function GoogleAdmobExample() {
|
|
534
573
|
* const [adLoadStatus, setAdLoadStatus] = useState<'not_loaded' | 'loaded' | 'failed'>('not_loaded');
|
|
535
574
|
* const navigation = useNavigation();
|
|
536
575
|
*
|
|
537
576
|
* const loadAd = useCallback(() => {
|
|
538
|
-
* if (GoogleAdMob.
|
|
577
|
+
* if (GoogleAdMob.loadAppsInTossAdMob.isSupported() !== true) {
|
|
539
578
|
* return;
|
|
540
579
|
* }
|
|
541
580
|
|
|
542
|
-
* const cleanup = GoogleAdMob.
|
|
581
|
+
* const cleanup = GoogleAdMob.loadAppsInTossAdMob({
|
|
543
582
|
* options: {
|
|
544
|
-
*
|
|
583
|
+
* adGroupId: AD_GROUP_ID,
|
|
545
584
|
* },
|
|
546
585
|
* onEvent: (event) => {
|
|
547
586
|
* switch (event.type) {
|
|
@@ -549,27 +588,6 @@ type LoadAdMobInterstitialAdParams = AdMobHandlerParams<LoadAdMobInterstitialAdO
|
|
|
549
588
|
* console.log('광고 로드 성공', event.data);
|
|
550
589
|
* setAdLoadStatus('loaded');
|
|
551
590
|
* break;
|
|
552
|
-
*
|
|
553
|
-
* case 'clicked':
|
|
554
|
-
* console.log('광고 클릭');
|
|
555
|
-
* break;
|
|
556
|
-
*
|
|
557
|
-
* case 'dismissed':
|
|
558
|
-
* console.log('광고 닫힘');
|
|
559
|
-
* navigation.navigate('/examples/google-admob-interstitial-ad-landing');
|
|
560
|
-
* break;
|
|
561
|
-
*
|
|
562
|
-
* case 'failedToShow':
|
|
563
|
-
* console.log('광고 보여주기 실패');
|
|
564
|
-
* break;
|
|
565
|
-
*
|
|
566
|
-
* case 'impression':
|
|
567
|
-
* console.log('광고 노출');
|
|
568
|
-
* break;
|
|
569
|
-
*
|
|
570
|
-
* case 'show':
|
|
571
|
-
* console.log('광고 컨텐츠 보여졌음');
|
|
572
|
-
* break;
|
|
573
591
|
* }
|
|
574
592
|
* },
|
|
575
593
|
* onError: (error) => {
|
|
@@ -581,19 +599,45 @@ type LoadAdMobInterstitialAdParams = AdMobHandlerParams<LoadAdMobInterstitialAdO
|
|
|
581
599
|
* }, [navigation]);
|
|
582
600
|
*
|
|
583
601
|
* const showAd = useCallback(() => {
|
|
584
|
-
* if (GoogleAdMob.
|
|
602
|
+
* if (GoogleAdMob.showAppsInTossAdMob.isSupported() !== true) {
|
|
585
603
|
* return;
|
|
586
604
|
* }
|
|
587
605
|
*
|
|
588
|
-
* GoogleAdMob.
|
|
606
|
+
* GoogleAdMob.showAppsInTossAdMob({
|
|
589
607
|
* options: {
|
|
590
|
-
*
|
|
608
|
+
* adGroupId: AD_GROUP_ID,
|
|
591
609
|
* },
|
|
592
610
|
* onEvent: (event) => {
|
|
593
611
|
* switch (event.type) {
|
|
594
612
|
* case 'requested':
|
|
595
613
|
* console.log('광고 보여주기 요청 완료');
|
|
596
614
|
* break;
|
|
615
|
+
*
|
|
616
|
+
* case 'clicked':
|
|
617
|
+
* console.log('광고 클릭');
|
|
618
|
+
* break;
|
|
619
|
+
*
|
|
620
|
+
* case 'dismissed':
|
|
621
|
+
* console.log('광고 닫힘');
|
|
622
|
+
* navigation.navigate('/examples/google-admob-interstitial-ad-landing');
|
|
623
|
+
* break;
|
|
624
|
+
*
|
|
625
|
+
* case 'failedToShow':
|
|
626
|
+
* console.log('광고 보여주기 실패');
|
|
627
|
+
* break;
|
|
628
|
+
*
|
|
629
|
+
* case 'impression':
|
|
630
|
+
* console.log('광고 노출');
|
|
631
|
+
* break;
|
|
632
|
+
*
|
|
633
|
+
* case 'userEarnedReward':
|
|
634
|
+
* console.log('광고 보상 획득 unitType:', event.data.unitType);
|
|
635
|
+
* console.log('광고 보상 획득 unitAmount:', event.data.unitAmount);
|
|
636
|
+
* break;
|
|
637
|
+
*
|
|
638
|
+
* case 'show':
|
|
639
|
+
* console.log('광고 컨텐츠 보여졌음');
|
|
640
|
+
* break;
|
|
597
641
|
* }
|
|
598
642
|
* },
|
|
599
643
|
* onError: (error) => {
|
|
@@ -648,16 +692,10 @@ type ShowAdMobInterstitialAdParams = AdMobHandlerParams<ShowAdMobInterstitialAdO
|
|
|
648
692
|
* @public
|
|
649
693
|
* @category 광고
|
|
650
694
|
* @name showAdMobInterstitialAd
|
|
651
|
-
* @
|
|
652
|
-
* @param {ShowAdMobInterstitialAdParams} params 광고를 보여주기 위해 사용할 설정 값이에요. 광고 ID와과 광고의 동작에 대한 콜백을 설정할 수 있어요.
|
|
653
|
-
* @param {ShowAdMobInterstitialAdOptions} params.options 광고를 보여줄 때 전달할 옵션 객체예요.
|
|
654
|
-
* @param {string} params.options.adUnitId 광고 단위 ID예요. `loadAdMobInterstitialAd` 로 불러온 전면 광고용 ID를 입력해요.
|
|
655
|
-
* @param {(event: ShowAdMobInterstitialAdEvent) => void} [params.onEvent] 광고 관련 이벤트가 발생했을 때 호출돼요. (예시: 광고 노출을 요청했을 때). 자세한 이벤트 타입은 [ShowAdMobInterstitialAdEvent](/react-native/reference/native-modules/광고/ShowAdMobInterstitialAdEvent.html)를 참고하세요.
|
|
656
|
-
* @param {(reason: unknown) => void} [params.onError] 광고를 노출하지 못했을 때 호출돼요. (예시: 네트워크 오류나 지원하지 않는 환경일 때)
|
|
657
|
-
* @property {() => boolean} [isSupported] 현재 실행 중인 앱(예: 토스 앱, 개발용 샌드박스 앱 등)에서 Google AdMob 광고 기능을 지원하는지 확인하는 함수예요. 기능을 사용하기 전에 지원 여부를 확인해야 해요.
|
|
695
|
+
* @deprecated 이 함수는 더 이상 사용되지 않습니다. 대신 {@link GoogleAdMob.showAppsInTossAdMob}를 사용해주세요.
|
|
658
696
|
*
|
|
659
697
|
* @example
|
|
660
|
-
* ### 버튼 눌러 불러온
|
|
698
|
+
* ### 버튼 눌러 불러온 광고 보여주기 (showAppsInTossAdMob로 변경 예제)
|
|
661
699
|
* ```tsx
|
|
662
700
|
* import { GoogleAdMob } from '@apps-in-toss/framework';
|
|
663
701
|
* import { useFocusEffect } from '@granite-js/native/@react-navigation/native';
|
|
@@ -665,20 +703,20 @@ type ShowAdMobInterstitialAdParams = AdMobHandlerParams<ShowAdMobInterstitialAdO
|
|
|
665
703
|
* import { useCallback, useState } from 'react';
|
|
666
704
|
* import { Button, Text, View } from 'react-native';
|
|
667
705
|
*
|
|
668
|
-
* const
|
|
706
|
+
* const AD_GROUP_ID = '<AD_GROUP_ID>';
|
|
669
707
|
*
|
|
670
|
-
* export function
|
|
708
|
+
* export function GoogleAdmobExample() {
|
|
671
709
|
* const [adLoadStatus, setAdLoadStatus] = useState<'not_loaded' | 'loaded' | 'failed'>('not_loaded');
|
|
672
710
|
* const navigation = useNavigation();
|
|
673
711
|
*
|
|
674
712
|
* const loadAd = useCallback(() => {
|
|
675
|
-
* if (GoogleAdMob.
|
|
713
|
+
* if (GoogleAdMob.loadAppsInTossAdMob.isSupported() !== true) {
|
|
676
714
|
* return;
|
|
677
715
|
* }
|
|
678
716
|
|
|
679
|
-
* const cleanup = GoogleAdMob.
|
|
717
|
+
* const cleanup = GoogleAdMob.loadAppsInTossAdMob({
|
|
680
718
|
* options: {
|
|
681
|
-
*
|
|
719
|
+
* adGroupId: AD_GROUP_ID,
|
|
682
720
|
* },
|
|
683
721
|
* onEvent: (event) => {
|
|
684
722
|
* switch (event.type) {
|
|
@@ -686,27 +724,6 @@ type ShowAdMobInterstitialAdParams = AdMobHandlerParams<ShowAdMobInterstitialAdO
|
|
|
686
724
|
* console.log('광고 로드 성공', event.data);
|
|
687
725
|
* setAdLoadStatus('loaded');
|
|
688
726
|
* break;
|
|
689
|
-
*
|
|
690
|
-
* case 'clicked':
|
|
691
|
-
* console.log('광고 클릭');
|
|
692
|
-
* break;
|
|
693
|
-
*
|
|
694
|
-
* case 'dismissed':
|
|
695
|
-
* console.log('광고 닫힘');
|
|
696
|
-
* navigation.navigate('/examples/google-admob-interstitial-ad-landing');
|
|
697
|
-
* break;
|
|
698
|
-
*
|
|
699
|
-
* case 'failedToShow':
|
|
700
|
-
* console.log('광고 보여주기 실패');
|
|
701
|
-
* break;
|
|
702
|
-
*
|
|
703
|
-
* case 'impression':
|
|
704
|
-
* console.log('광고 노출');
|
|
705
|
-
* break;
|
|
706
|
-
*
|
|
707
|
-
* case 'show':
|
|
708
|
-
* console.log('광고 컨텐츠 보여졌음');
|
|
709
|
-
* break;
|
|
710
727
|
* }
|
|
711
728
|
* },
|
|
712
729
|
* onError: (error) => {
|
|
@@ -718,19 +735,45 @@ type ShowAdMobInterstitialAdParams = AdMobHandlerParams<ShowAdMobInterstitialAdO
|
|
|
718
735
|
* }, [navigation]);
|
|
719
736
|
*
|
|
720
737
|
* const showAd = useCallback(() => {
|
|
721
|
-
* if (GoogleAdMob.
|
|
738
|
+
* if (GoogleAdMob.showAppsInTossAdMob.isSupported() !== true) {
|
|
722
739
|
* return;
|
|
723
740
|
* }
|
|
724
741
|
*
|
|
725
|
-
* GoogleAdMob.
|
|
742
|
+
* GoogleAdMob.showAppsInTossAdMob({
|
|
726
743
|
* options: {
|
|
727
|
-
*
|
|
744
|
+
* adGroupId: AD_GROUP_ID,
|
|
728
745
|
* },
|
|
729
746
|
* onEvent: (event) => {
|
|
730
747
|
* switch (event.type) {
|
|
731
748
|
* case 'requested':
|
|
732
749
|
* console.log('광고 보여주기 요청 완료');
|
|
733
750
|
* break;
|
|
751
|
+
*
|
|
752
|
+
* case 'clicked':
|
|
753
|
+
* console.log('광고 클릭');
|
|
754
|
+
* break;
|
|
755
|
+
*
|
|
756
|
+
* case 'dismissed':
|
|
757
|
+
* console.log('광고 닫힘');
|
|
758
|
+
* navigation.navigate('/examples/google-admob-interstitial-ad-landing');
|
|
759
|
+
* break;
|
|
760
|
+
*
|
|
761
|
+
* case 'failedToShow':
|
|
762
|
+
* console.log('광고 보여주기 실패');
|
|
763
|
+
* break;
|
|
764
|
+
*
|
|
765
|
+
* case 'impression':
|
|
766
|
+
* console.log('광고 노출');
|
|
767
|
+
* break;
|
|
768
|
+
*
|
|
769
|
+
* case 'userEarnedReward':
|
|
770
|
+
* console.log('광고 보상 획득 unitType:', event.data.unitType);
|
|
771
|
+
* console.log('광고 보상 획득 unitAmount:', event.data.unitAmount);
|
|
772
|
+
* break;
|
|
773
|
+
*
|
|
774
|
+
* case 'show':
|
|
775
|
+
* console.log('광고 컨텐츠 보여졌음');
|
|
776
|
+
* break;
|
|
734
777
|
* }
|
|
735
778
|
* },
|
|
736
779
|
* onError: (error) => {
|
|
@@ -788,44 +831,62 @@ type LoadAdMobRewardedAdParams = AdMobHandlerParams<LoadAdMobRewardedAdOptions,
|
|
|
788
831
|
* @public
|
|
789
832
|
* @category 광고
|
|
790
833
|
* @name loadAdMobRewardedAd
|
|
791
|
-
* @
|
|
792
|
-
* @param {LoadAdMobRewardedAdParams} params 광고를 불러올 때 사용할 설정 값이에요. 광고 ID와 광고의 동작에 대한 콜백을 설정할 수 있어요.
|
|
793
|
-
* @param {LoadAdMobRewardedAdOptions} params.options 광고를 불러올 때 전달할 옵션 객체예요.
|
|
794
|
-
* @param {string} params.options.adUnitId 광고 단위 ID예요. 발급받은 보상형 광고용 ID를 입력해요.
|
|
795
|
-
* @param {(event: LoadAdMobRewardedAdEvent) => void} [params.onEvent] 광고 관련 이벤트가 발생했을 때 호출돼요. (예시: 광고가 닫히거나 클릭됐을 때). 자세한 이벤트 타입은 [LoadAdMobRewardedAdEvent](/react-native/reference/native-modules/광고/LoadAdMobRewardedAdEvent.html)를 참고하세요.
|
|
796
|
-
* @param {(reason: unknown) => void} [params.onError] 광고를 불러오지 못했을 때 호출돼요. (예시: 네트워크 오류나 지원하지 않는 환경일 때)
|
|
797
|
-
* @property {() => boolean} [isSupported] 현재 실행 중인 앱(예: 토스 앱, 개발용 샌드박스 앱 등)에서 Google AdMob 광고 기능을 지원하는지 확인하는 함수예요. 기능을 사용하기 전에 지원 여부를 확인해야 해요.
|
|
834
|
+
* @deprecated 이 함수는 더 이상 사용되지 않습니다. 대신 {@link GoogleAdMob.loadAppsInTossAdMob}를 사용해주세요.
|
|
798
835
|
*
|
|
799
836
|
* @example
|
|
800
|
-
*
|
|
801
|
-
* ### 버튼 눌러 불러온 보상형 광고 보여주기
|
|
802
|
-
*
|
|
837
|
+
* ### 버튼 눌러 불러온 광고 보여주기 (loadAppsInTossAdMob로 변경 예제)
|
|
803
838
|
* ```tsx
|
|
804
839
|
* import { GoogleAdMob } from '@apps-in-toss/framework';
|
|
840
|
+
* import { useFocusEffect } from '@react-native-bedrock/native/@react-navigation/native';
|
|
805
841
|
* import { useCallback, useState } from 'react';
|
|
806
842
|
* import { Button, Text, View } from 'react-native';
|
|
843
|
+
* import { useNavigation } from 'react-native-bedrock';
|
|
807
844
|
*
|
|
808
|
-
* const
|
|
845
|
+
* const AD_GROUP_ID = '<AD_GROUP_ID>';
|
|
809
846
|
*
|
|
810
|
-
* export function
|
|
847
|
+
* export function GoogleAdmobExample() {
|
|
811
848
|
* const [adLoadStatus, setAdLoadStatus] = useState<'not_loaded' | 'loaded' | 'failed'>('not_loaded');
|
|
849
|
+
* const navigation = useNavigation();
|
|
812
850
|
*
|
|
813
851
|
* const loadAd = useCallback(() => {
|
|
814
|
-
* if (GoogleAdMob.
|
|
852
|
+
* if (GoogleAdMob.loadAppsInTossAdMob.isSupported() !== true) {
|
|
815
853
|
* return;
|
|
816
854
|
* }
|
|
817
|
-
|
|
818
|
-
* const cleanup = GoogleAdMob.
|
|
855
|
+
|
|
856
|
+
* const cleanup = GoogleAdMob.loadAppsInTossAdMob({
|
|
819
857
|
* options: {
|
|
820
|
-
*
|
|
858
|
+
* adGroupId: AD_GROUP_ID,
|
|
821
859
|
* },
|
|
822
860
|
* onEvent: (event) => {
|
|
823
|
-
* console.log(event.type);
|
|
824
861
|
* switch (event.type) {
|
|
825
862
|
* case 'loaded':
|
|
826
863
|
* console.log('광고 로드 성공', event.data);
|
|
827
864
|
* setAdLoadStatus('loaded');
|
|
828
865
|
* break;
|
|
866
|
+
* }
|
|
867
|
+
* },
|
|
868
|
+
* onError: (error) => {
|
|
869
|
+
* console.error('광고 불러오기 실패', error);
|
|
870
|
+
* },
|
|
871
|
+
* });
|
|
872
|
+
*
|
|
873
|
+
* return cleanup;
|
|
874
|
+
* }, [navigation]);
|
|
875
|
+
*
|
|
876
|
+
* const showAd = useCallback(() => {
|
|
877
|
+
* if (GoogleAdMob.showAppsInTossAdMob.isSupported() !== true) {
|
|
878
|
+
* return;
|
|
879
|
+
* }
|
|
880
|
+
*
|
|
881
|
+
* GoogleAdMob.showAppsInTossAdMob({
|
|
882
|
+
* options: {
|
|
883
|
+
* adGroupId: AD_GROUP_ID,
|
|
884
|
+
* },
|
|
885
|
+
* onEvent: (event) => {
|
|
886
|
+
* switch (event.type) {
|
|
887
|
+
* case 'requested':
|
|
888
|
+
* console.log('광고 보여주기 요청 완료');
|
|
889
|
+
* break;
|
|
829
890
|
*
|
|
830
891
|
* case 'clicked':
|
|
831
892
|
* console.log('광고 클릭');
|
|
@@ -833,6 +894,7 @@ type LoadAdMobRewardedAdParams = AdMobHandlerParams<LoadAdMobRewardedAdOptions,
|
|
|
833
894
|
*
|
|
834
895
|
* case 'dismissed':
|
|
835
896
|
* console.log('광고 닫힘');
|
|
897
|
+
* navigation.navigate('/examples/google-admob-interstitial-ad-landing');
|
|
836
898
|
* break;
|
|
837
899
|
*
|
|
838
900
|
* case 'failedToShow':
|
|
@@ -843,12 +905,99 @@ type LoadAdMobRewardedAdParams = AdMobHandlerParams<LoadAdMobRewardedAdOptions,
|
|
|
843
905
|
* console.log('광고 노출');
|
|
844
906
|
* break;
|
|
845
907
|
*
|
|
908
|
+
* case 'userEarnedReward':
|
|
909
|
+
* console.log('광고 보상 획득 unitType:', event.data.unitType);
|
|
910
|
+
* console.log('광고 보상 획득 unitAmount:', event.data.unitAmount);
|
|
911
|
+
* break;
|
|
912
|
+
*
|
|
846
913
|
* case 'show':
|
|
847
914
|
* console.log('광고 컨텐츠 보여졌음');
|
|
848
915
|
* break;
|
|
916
|
+
* }
|
|
917
|
+
* },
|
|
918
|
+
* onError: (error) => {
|
|
919
|
+
* console.error('광고 보여주기 실패', error);
|
|
920
|
+
* },
|
|
921
|
+
* });
|
|
922
|
+
* }, []);
|
|
849
923
|
*
|
|
850
|
-
*
|
|
851
|
-
*
|
|
924
|
+
* useFocusEffect(loadAd);
|
|
925
|
+
*
|
|
926
|
+
* return (
|
|
927
|
+
* <View>
|
|
928
|
+
* <Text>
|
|
929
|
+
* {adLoadStatus === 'not_loaded' && '광고 로드 하지 않음 '}
|
|
930
|
+
* {adLoadStatus === 'loaded' && '광고 로드 완료'}
|
|
931
|
+
* {adLoadStatus === 'failed' && '광고 로드 실패'}
|
|
932
|
+
* </Text>
|
|
933
|
+
*
|
|
934
|
+
* <Button title="Show Ad" onPress={showAd} disabled={adLoadStatus !== 'loaded'} />
|
|
935
|
+
* </View>
|
|
936
|
+
* );
|
|
937
|
+
* }
|
|
938
|
+
* ```
|
|
939
|
+
*/
|
|
940
|
+
declare function loadAdMobRewardedAd(params: LoadAdMobRewardedAdParams): () => void;
|
|
941
|
+
declare namespace loadAdMobRewardedAd {
|
|
942
|
+
var isSupported: () => boolean;
|
|
943
|
+
}
|
|
944
|
+
interface ShowAdMobRewardedAdOptions {
|
|
945
|
+
/**
|
|
946
|
+
* 광고 단위 ID
|
|
947
|
+
*/
|
|
948
|
+
adUnitId: string;
|
|
949
|
+
}
|
|
950
|
+
/**
|
|
951
|
+
* @public
|
|
952
|
+
* @category 광고
|
|
953
|
+
* @name ShowAdMobRewardedAdEvent
|
|
954
|
+
* @description 보상형 광고를 보여주는 함수에서 발생하는 이벤트 타입이에요. `requested` 이벤트가 발생하면 광고 노출 요청이 Google AdMob에 성공적으로 전달된 거예요.
|
|
955
|
+
*/
|
|
956
|
+
type ShowAdMobRewardedAdEvent = {
|
|
957
|
+
type: 'requested';
|
|
958
|
+
};
|
|
959
|
+
/**
|
|
960
|
+
* @public
|
|
961
|
+
* @category 광고
|
|
962
|
+
* @name ShowAdMobRewardedAdParams
|
|
963
|
+
* @description 불러온 보상형 광고를 보여주는 함수에 필요한 옵션 객체예요.
|
|
964
|
+
*/
|
|
965
|
+
type ShowAdMobRewardedAdParams = AdMobHandlerParams<ShowAdMobRewardedAdOptions, ShowAdMobRewardedAdEvent>;
|
|
966
|
+
/**
|
|
967
|
+
* @public
|
|
968
|
+
* @category 광고
|
|
969
|
+
* @name showAdMobRewardedAd
|
|
970
|
+
* @deprecated 이 함수는 더 이상 사용되지 않습니다. 대신 {@link GoogleAdMob.showAppsInTossAdMob}를 사용해주세요.
|
|
971
|
+
*
|
|
972
|
+
* @example
|
|
973
|
+
* ### 버튼 눌러 불러온 광고 보여주기 (showAppsInTossAdMob로 변경 예제)
|
|
974
|
+
* ```tsx
|
|
975
|
+
* import { GoogleAdMob } from '@apps-in-toss/framework';
|
|
976
|
+
* import { useFocusEffect } from '@react-native-bedrock/native/@react-navigation/native';
|
|
977
|
+
* import { useCallback, useState } from 'react';
|
|
978
|
+
* import { Button, Text, View } from 'react-native';
|
|
979
|
+
* import { useNavigation } from 'react-native-bedrock';
|
|
980
|
+
*
|
|
981
|
+
* const AD_GROUP_ID = '<AD_GROUP_ID>';
|
|
982
|
+
*
|
|
983
|
+
* export function GoogleAdmobExample() {
|
|
984
|
+
* const [adLoadStatus, setAdLoadStatus] = useState<'not_loaded' | 'loaded' | 'failed'>('not_loaded');
|
|
985
|
+
* const navigation = useNavigation();
|
|
986
|
+
*
|
|
987
|
+
* const loadAd = useCallback(() => {
|
|
988
|
+
* if (GoogleAdMob.loadAppsInTossAdMob.isSupported() !== true) {
|
|
989
|
+
* return;
|
|
990
|
+
* }
|
|
991
|
+
|
|
992
|
+
* const cleanup = GoogleAdMob.loadAppsInTossAdMob({
|
|
993
|
+
* options: {
|
|
994
|
+
* adGroupId: AD_GROUP_ID,
|
|
995
|
+
* },
|
|
996
|
+
* onEvent: (event) => {
|
|
997
|
+
* switch (event.type) {
|
|
998
|
+
* case 'loaded':
|
|
999
|
+
* console.log('광고 로드 성공', event.data);
|
|
1000
|
+
* setAdLoadStatus('loaded');
|
|
852
1001
|
* break;
|
|
853
1002
|
* }
|
|
854
1003
|
* },
|
|
@@ -858,22 +1007,47 @@ type LoadAdMobRewardedAdParams = AdMobHandlerParams<LoadAdMobRewardedAdOptions,
|
|
|
858
1007
|
* });
|
|
859
1008
|
*
|
|
860
1009
|
* return cleanup;
|
|
861
|
-
* }, []);
|
|
1010
|
+
* }, [navigation]);
|
|
862
1011
|
*
|
|
863
1012
|
* const showAd = useCallback(() => {
|
|
864
|
-
* if (GoogleAdMob.
|
|
1013
|
+
* if (GoogleAdMob.showAppsInTossAdMob.isSupported() !== true) {
|
|
865
1014
|
* return;
|
|
866
1015
|
* }
|
|
867
1016
|
*
|
|
868
|
-
* GoogleAdMob.
|
|
1017
|
+
* GoogleAdMob.showAppsInTossAdMob({
|
|
869
1018
|
* options: {
|
|
870
|
-
*
|
|
1019
|
+
* adGroupId: AD_GROUP_ID,
|
|
871
1020
|
* },
|
|
872
1021
|
* onEvent: (event) => {
|
|
873
1022
|
* switch (event.type) {
|
|
874
1023
|
* case 'requested':
|
|
875
1024
|
* console.log('광고 보여주기 요청 완료');
|
|
876
|
-
*
|
|
1025
|
+
* break;
|
|
1026
|
+
*
|
|
1027
|
+
* case 'clicked':
|
|
1028
|
+
* console.log('광고 클릭');
|
|
1029
|
+
* break;
|
|
1030
|
+
*
|
|
1031
|
+
* case 'dismissed':
|
|
1032
|
+
* console.log('광고 닫힘');
|
|
1033
|
+
* navigation.navigate('/examples/google-admob-interstitial-ad-landing');
|
|
1034
|
+
* break;
|
|
1035
|
+
*
|
|
1036
|
+
* case 'failedToShow':
|
|
1037
|
+
* console.log('광고 보여주기 실패');
|
|
1038
|
+
* break;
|
|
1039
|
+
*
|
|
1040
|
+
* case 'impression':
|
|
1041
|
+
* console.log('광고 노출');
|
|
1042
|
+
* break;
|
|
1043
|
+
*
|
|
1044
|
+
* case 'userEarnedReward':
|
|
1045
|
+
* console.log('광고 보상 획득 unitType:', event.data.unitType);
|
|
1046
|
+
* console.log('광고 보상 획득 unitAmount:', event.data.unitAmount);
|
|
1047
|
+
* break;
|
|
1048
|
+
*
|
|
1049
|
+
* case 'show':
|
|
1050
|
+
* console.log('광고 컨텐츠 보여졌음');
|
|
877
1051
|
* break;
|
|
878
1052
|
* }
|
|
879
1053
|
* },
|
|
@@ -883,6 +1057,8 @@ type LoadAdMobRewardedAdParams = AdMobHandlerParams<LoadAdMobRewardedAdOptions,
|
|
|
883
1057
|
* });
|
|
884
1058
|
* }, []);
|
|
885
1059
|
*
|
|
1060
|
+
* useFocusEffect(loadAd);
|
|
1061
|
+
*
|
|
886
1062
|
* return (
|
|
887
1063
|
* <View>
|
|
888
1064
|
* <Text>
|
|
@@ -891,80 +1067,106 @@ type LoadAdMobRewardedAdParams = AdMobHandlerParams<LoadAdMobRewardedAdOptions,
|
|
|
891
1067
|
* {adLoadStatus === 'failed' && '광고 로드 실패'}
|
|
892
1068
|
* </Text>
|
|
893
1069
|
*
|
|
894
|
-
* <Button title="Load Ad" onPress={loadAd} />
|
|
895
1070
|
* <Button title="Show Ad" onPress={showAd} disabled={adLoadStatus !== 'loaded'} />
|
|
896
1071
|
* </View>
|
|
897
1072
|
* );
|
|
898
1073
|
* }
|
|
899
1074
|
* ```
|
|
900
1075
|
*/
|
|
901
|
-
declare function
|
|
902
|
-
declare namespace
|
|
1076
|
+
declare function showAdMobRewardedAd(params: ShowAdMobRewardedAdParams): () => void;
|
|
1077
|
+
declare namespace showAdMobRewardedAd {
|
|
903
1078
|
var isSupported: () => boolean;
|
|
904
1079
|
}
|
|
905
|
-
|
|
1080
|
+
|
|
1081
|
+
interface LoadAdMobOptions {
|
|
906
1082
|
/**
|
|
907
|
-
* 광고 단위 ID
|
|
1083
|
+
* 광고 그룹 단위 ID
|
|
908
1084
|
*/
|
|
909
|
-
|
|
1085
|
+
adGroupId: string;
|
|
910
1086
|
}
|
|
911
1087
|
/**
|
|
912
1088
|
* @public
|
|
913
1089
|
* @category 광고
|
|
914
|
-
* @name
|
|
915
|
-
* @description
|
|
1090
|
+
* @name LoadAdMobEvent
|
|
1091
|
+
* @description 광고를 불러오는 함수에서 발생하는 이벤트 타입이에요. `loaded` 이벤트가 발생하면 광고를 성공적으로 불러온 거예요. 이때 [AdMobLoadResult](/react-native/reference/native-modules/광고/AdMobLoadResult.html) 객체가 함께 반환돼요.
|
|
916
1092
|
*/
|
|
917
|
-
type
|
|
918
|
-
type: '
|
|
1093
|
+
type LoadAdMobEvent = {
|
|
1094
|
+
type: 'loaded';
|
|
1095
|
+
data: AdMobLoadResult;
|
|
919
1096
|
};
|
|
920
1097
|
/**
|
|
921
1098
|
* @public
|
|
922
1099
|
* @category 광고
|
|
923
|
-
* @name
|
|
924
|
-
* @description
|
|
1100
|
+
* @name LoadAdMobParams
|
|
1101
|
+
* @description 광고를 불러오는 함수에 필요한 옵션 객체예요.
|
|
925
1102
|
*/
|
|
926
|
-
type
|
|
1103
|
+
type LoadAdMobParams = AdMobHandlerParams<LoadAdMobOptions, LoadAdMobEvent>;
|
|
927
1104
|
/**
|
|
928
1105
|
* @public
|
|
929
1106
|
* @category 광고
|
|
930
|
-
* @name
|
|
931
|
-
* @description
|
|
932
|
-
* @param {
|
|
933
|
-
* @param {
|
|
934
|
-
* @param {string} params.options.
|
|
935
|
-
* @param {(event:
|
|
1107
|
+
* @name loadAppsInTossAdMob
|
|
1108
|
+
* @description 광고를 미리 불러와서, 광고가 필요한 시점에 바로 보여줄 수 있도록 준비하는 함수예요.
|
|
1109
|
+
* @param {LoadAdMobParams} params 광고를 불러올 때 사용할 설정 값이에요. 광고 그룹 ID와 광고의 동작에 대한 콜백을 설정할 수 있어요.
|
|
1110
|
+
* @param {LoadAdMobOptions} params.options 광고를 불러올 때 전달할 옵션 객체예요.
|
|
1111
|
+
* @param {string} params.options.adGroupId 광고 그룹 단위 ID예요. 콘솔에서 발급받은 ID를 입력해요.
|
|
1112
|
+
* @param {(event: LoadAdMobEvent) => void} [params.onEvent] 광고 관련 이벤트가 발생했을 때 호출돼요. (예시: 광고가 닫히거나 클릭됐을 때). 자세한 이벤트 타입은 [LoadAdMobEvent](/react-native/reference/native-modules/광고/LoadAdMobEvent.html)를 참고하세요.
|
|
936
1113
|
* @param {(reason: unknown) => void} [params.onError] 광고를 불러오지 못했을 때 호출돼요. (예시: 네트워크 오류나 지원하지 않는 환경일 때)
|
|
937
1114
|
* @property {() => boolean} [isSupported] 현재 실행 중인 앱(예: 토스 앱, 개발용 샌드박스 앱 등)에서 Google AdMob 광고 기능을 지원하는지 확인하는 함수예요. 기능을 사용하기 전에 지원 여부를 확인해야 해요.
|
|
938
1115
|
*
|
|
939
1116
|
* @example
|
|
940
|
-
* ### 버튼 눌러 불러온
|
|
941
|
-
*
|
|
1117
|
+
* ### 버튼 눌러 불러온 광고 보여주기
|
|
942
1118
|
* ```tsx
|
|
943
1119
|
* import { GoogleAdMob } from '@apps-in-toss/framework';
|
|
1120
|
+
* import { useFocusEffect } from '@react-native-bedrock/native/@react-navigation/native';
|
|
944
1121
|
* import { useCallback, useState } from 'react';
|
|
945
1122
|
* import { Button, Text, View } from 'react-native';
|
|
1123
|
+
* import { useNavigation } from 'react-native-bedrock';
|
|
946
1124
|
*
|
|
947
|
-
* const
|
|
1125
|
+
* const AD_GROUP_ID = '<AD_GROUP_ID>';
|
|
948
1126
|
*
|
|
949
|
-
* export function
|
|
1127
|
+
* export function GoogleAdmobExample() {
|
|
950
1128
|
* const [adLoadStatus, setAdLoadStatus] = useState<'not_loaded' | 'loaded' | 'failed'>('not_loaded');
|
|
1129
|
+
* const navigation = useNavigation();
|
|
951
1130
|
*
|
|
952
1131
|
* const loadAd = useCallback(() => {
|
|
953
|
-
* if (GoogleAdMob.
|
|
1132
|
+
* if (GoogleAdMob.loadAppsInTossAdMob.isSupported() !== true) {
|
|
954
1133
|
* return;
|
|
955
1134
|
* }
|
|
956
|
-
|
|
957
|
-
* const cleanup = GoogleAdMob.
|
|
1135
|
+
|
|
1136
|
+
* const cleanup = GoogleAdMob.loadAppsInTossAdMob({
|
|
958
1137
|
* options: {
|
|
959
|
-
*
|
|
1138
|
+
* adGroupId: AD_GROUP_ID,
|
|
960
1139
|
* },
|
|
961
1140
|
* onEvent: (event) => {
|
|
962
|
-
* console.log(event.type);
|
|
963
1141
|
* switch (event.type) {
|
|
964
1142
|
* case 'loaded':
|
|
965
1143
|
* console.log('광고 로드 성공', event.data);
|
|
966
1144
|
* setAdLoadStatus('loaded');
|
|
967
1145
|
* break;
|
|
1146
|
+
* }
|
|
1147
|
+
* },
|
|
1148
|
+
* onError: (error) => {
|
|
1149
|
+
* console.error('광고 불러오기 실패', error);
|
|
1150
|
+
* },
|
|
1151
|
+
* });
|
|
1152
|
+
*
|
|
1153
|
+
* return cleanup;
|
|
1154
|
+
* }, [navigation]);
|
|
1155
|
+
*
|
|
1156
|
+
* const showAd = useCallback(() => {
|
|
1157
|
+
* if (GoogleAdMob.showAppsInTossAdMob.isSupported() !== true) {
|
|
1158
|
+
* return;
|
|
1159
|
+
* }
|
|
1160
|
+
*
|
|
1161
|
+
* GoogleAdMob.showAppsInTossAdMob({
|
|
1162
|
+
* options: {
|
|
1163
|
+
* adGroupId: AD_GROUP_ID,
|
|
1164
|
+
* },
|
|
1165
|
+
* onEvent: (event) => {
|
|
1166
|
+
* switch (event.type) {
|
|
1167
|
+
* case 'requested':
|
|
1168
|
+
* console.log('광고 보여주기 요청 완료');
|
|
1169
|
+
* break;
|
|
968
1170
|
*
|
|
969
1171
|
* case 'clicked':
|
|
970
1172
|
* console.log('광고 클릭');
|
|
@@ -972,6 +1174,7 @@ type ShowAdMobRewardedAdParams = AdMobHandlerParams<ShowAdMobRewardedAdOptions,
|
|
|
972
1174
|
*
|
|
973
1175
|
* case 'dismissed':
|
|
974
1176
|
* console.log('광고 닫힘');
|
|
1177
|
+
* navigation.navigate('/examples/google-admob-interstitial-ad-landing');
|
|
975
1178
|
* break;
|
|
976
1179
|
*
|
|
977
1180
|
* case 'failedToShow':
|
|
@@ -982,12 +1185,105 @@ type ShowAdMobRewardedAdParams = AdMobHandlerParams<ShowAdMobRewardedAdOptions,
|
|
|
982
1185
|
* console.log('광고 노출');
|
|
983
1186
|
* break;
|
|
984
1187
|
*
|
|
1188
|
+
* case 'userEarnedReward':
|
|
1189
|
+
* console.log('광고 보상 획득 unitType:', event.data.unitType);
|
|
1190
|
+
* console.log('광고 보상 획득 unitAmount:', event.data.unitAmount);
|
|
1191
|
+
* break;
|
|
1192
|
+
*
|
|
985
1193
|
* case 'show':
|
|
986
1194
|
* console.log('광고 컨텐츠 보여졌음');
|
|
987
1195
|
* break;
|
|
1196
|
+
* }
|
|
1197
|
+
* },
|
|
1198
|
+
* onError: (error) => {
|
|
1199
|
+
* console.error('광고 보여주기 실패', error);
|
|
1200
|
+
* },
|
|
1201
|
+
* });
|
|
1202
|
+
* }, []);
|
|
988
1203
|
*
|
|
989
|
-
*
|
|
990
|
-
*
|
|
1204
|
+
* useFocusEffect(loadAd);
|
|
1205
|
+
*
|
|
1206
|
+
* return (
|
|
1207
|
+
* <View>
|
|
1208
|
+
* <Text>
|
|
1209
|
+
* {adLoadStatus === 'not_loaded' && '광고 로드 하지 않음 '}
|
|
1210
|
+
* {adLoadStatus === 'loaded' && '광고 로드 완료'}
|
|
1211
|
+
* {adLoadStatus === 'failed' && '광고 로드 실패'}
|
|
1212
|
+
* </Text>
|
|
1213
|
+
*
|
|
1214
|
+
* <Button title="Show Ad" onPress={showAd} disabled={adLoadStatus !== 'loaded'} />
|
|
1215
|
+
* </View>
|
|
1216
|
+
* );
|
|
1217
|
+
* }
|
|
1218
|
+
* ```
|
|
1219
|
+
*/
|
|
1220
|
+
declare function loadAppsInTossAdMob(params: LoadAdMobParams): () => void;
|
|
1221
|
+
declare namespace loadAppsInTossAdMob {
|
|
1222
|
+
var isSupported: () => boolean;
|
|
1223
|
+
}
|
|
1224
|
+
interface ShowAdMobOptions {
|
|
1225
|
+
/**
|
|
1226
|
+
* 광고 그룹 단위 ID
|
|
1227
|
+
*/
|
|
1228
|
+
adGroupId: string;
|
|
1229
|
+
}
|
|
1230
|
+
/**
|
|
1231
|
+
* @public
|
|
1232
|
+
* @category 광고
|
|
1233
|
+
* @name ShowAdMobEvent
|
|
1234
|
+
* @description 광고를 보여주는 함수에서 발생하는 이벤트 타입이에요. `requested` 이벤트가 발생하면 광고 노출 요청이 Google AdMob에 성공적으로 전달된 거예요.
|
|
1235
|
+
*/
|
|
1236
|
+
type ShowAdMobEvent = AdMobFullScreenEvent | AdUserEarnedReward | {
|
|
1237
|
+
type: 'requested';
|
|
1238
|
+
};
|
|
1239
|
+
/**
|
|
1240
|
+
* @public
|
|
1241
|
+
* @category 광고
|
|
1242
|
+
* @name ShowAdMobParams
|
|
1243
|
+
* @description 불러온 광고를 보여주는 함수에 필요한 옵션 객체예요.
|
|
1244
|
+
*/
|
|
1245
|
+
type ShowAdMobParams = AdMobHandlerParams<ShowAdMobOptions, ShowAdMobEvent>;
|
|
1246
|
+
/**
|
|
1247
|
+
* @public
|
|
1248
|
+
* @category 광고
|
|
1249
|
+
* @name showAppsInTossAdMob
|
|
1250
|
+
* @description 광고를 사용자에게 노출해요. 이 함수는 `loadAppsInTossAdMob` 로 미리 불러온 광고를 실제로 사용자에게 노출해요.
|
|
1251
|
+
* @param {ShowAdMobParams} params 광고를 보여주기 위해 사용할 설정 값이에요. 광고 그룹 ID와과 광고의 동작에 대한 콜백을 설정할 수 있어요.
|
|
1252
|
+
* @param {ShowAdMobOptions} params.options 광고를 보여줄 때 전달할 옵션 객체예요.
|
|
1253
|
+
* @param {string} params.options.adUnitId 광고 그룹 단위 ID예요. `loadAppsInTossAdMob` 로 불러온 광고용 그룹 ID를 입력해요.
|
|
1254
|
+
* @param {(event: ShowAdMobEvent) => void} [params.onEvent] 광고 관련 이벤트가 발생했을 때 호출돼요. (예시: 광고 노출을 요청했을 때). 자세한 이벤트 타입은 [ShowAdMobEvent](/react-native/reference/native-modules/광고/ShowAdMobEvent.html)를 참고하세요.
|
|
1255
|
+
* @param {(reason: unknown) => void} [params.onError] 광고를 노출하지 못했을 때 호출돼요. (예시: 네트워크 오류나 지원하지 않는 환경일 때)
|
|
1256
|
+
* @property {() => boolean} [isSupported] 현재 실행 중인 앱(예: 토스 앱, 개발용 샌드박스 앱 등)에서 Google AdMob 광고 기능을 지원하는지 확인하는 함수예요. 기능을 사용하기 전에 지원 여부를 확인해야 해요.
|
|
1257
|
+
*
|
|
1258
|
+
* @example
|
|
1259
|
+
* ### 버튼 눌러 불러온 광고 보여주기
|
|
1260
|
+
* ```tsx
|
|
1261
|
+
* import { GoogleAdMob } from '@apps-in-toss/framework';
|
|
1262
|
+
* import { useFocusEffect } from '@react-native-bedrock/native/@react-navigation/native';
|
|
1263
|
+
* import { useCallback, useState } from 'react';
|
|
1264
|
+
* import { Button, Text, View } from 'react-native';
|
|
1265
|
+
* import { useNavigation } from 'react-native-bedrock';
|
|
1266
|
+
*
|
|
1267
|
+
* const AD_GROUP_ID = '<AD_GROUP_ID>';
|
|
1268
|
+
*
|
|
1269
|
+
* export function GoogleAdmobExample() {
|
|
1270
|
+
* const [adLoadStatus, setAdLoadStatus] = useState<'not_loaded' | 'loaded' | 'failed'>('not_loaded');
|
|
1271
|
+
* const navigation = useNavigation();
|
|
1272
|
+
*
|
|
1273
|
+
* const loadAd = useCallback(() => {
|
|
1274
|
+
* if (GoogleAdMob.loadAppsInTossAdMob.isSupported() !== true) {
|
|
1275
|
+
* return;
|
|
1276
|
+
* }
|
|
1277
|
+
|
|
1278
|
+
* const cleanup = GoogleAdMob.loadAppsInTossAdMob({
|
|
1279
|
+
* options: {
|
|
1280
|
+
* adGroupId: AD_GROUP_ID,
|
|
1281
|
+
* },
|
|
1282
|
+
* onEvent: (event) => {
|
|
1283
|
+
* switch (event.type) {
|
|
1284
|
+
* case 'loaded':
|
|
1285
|
+
* console.log('광고 로드 성공', event.data);
|
|
1286
|
+
* setAdLoadStatus('loaded');
|
|
991
1287
|
* break;
|
|
992
1288
|
* }
|
|
993
1289
|
* },
|
|
@@ -997,22 +1293,47 @@ type ShowAdMobRewardedAdParams = AdMobHandlerParams<ShowAdMobRewardedAdOptions,
|
|
|
997
1293
|
* });
|
|
998
1294
|
*
|
|
999
1295
|
* return cleanup;
|
|
1000
|
-
* }, []);
|
|
1296
|
+
* }, [navigation]);
|
|
1001
1297
|
*
|
|
1002
1298
|
* const showAd = useCallback(() => {
|
|
1003
|
-
* if (GoogleAdMob.
|
|
1299
|
+
* if (GoogleAdMob.showAppsInTossAdMob.isSupported() !== true) {
|
|
1004
1300
|
* return;
|
|
1005
1301
|
* }
|
|
1006
1302
|
*
|
|
1007
|
-
* GoogleAdMob.
|
|
1303
|
+
* GoogleAdMob.showAppsInTossAdMob({
|
|
1008
1304
|
* options: {
|
|
1009
|
-
*
|
|
1305
|
+
* adGroupId: AD_GROUP_ID,
|
|
1010
1306
|
* },
|
|
1011
1307
|
* onEvent: (event) => {
|
|
1012
1308
|
* switch (event.type) {
|
|
1013
1309
|
* case 'requested':
|
|
1014
1310
|
* console.log('광고 보여주기 요청 완료');
|
|
1015
|
-
*
|
|
1311
|
+
* break;
|
|
1312
|
+
*
|
|
1313
|
+
* case 'clicked':
|
|
1314
|
+
* console.log('광고 클릭');
|
|
1315
|
+
* break;
|
|
1316
|
+
*
|
|
1317
|
+
* case 'dismissed':
|
|
1318
|
+
* console.log('광고 닫힘');
|
|
1319
|
+
* navigation.navigate('/examples/google-admob-interstitial-ad-landing');
|
|
1320
|
+
* break;
|
|
1321
|
+
*
|
|
1322
|
+
* case 'failedToShow':
|
|
1323
|
+
* console.log('광고 보여주기 실패');
|
|
1324
|
+
* break;
|
|
1325
|
+
*
|
|
1326
|
+
* case 'impression':
|
|
1327
|
+
* console.log('광고 노출');
|
|
1328
|
+
* break;
|
|
1329
|
+
*
|
|
1330
|
+
* case 'userEarnedReward':
|
|
1331
|
+
* console.log('광고 보상 획득 unitType:', event.data.unitType);
|
|
1332
|
+
* console.log('광고 보상 획득 unitAmount:', event.data.unitAmount);
|
|
1333
|
+
* break;
|
|
1334
|
+
*
|
|
1335
|
+
* case 'show':
|
|
1336
|
+
* console.log('광고 컨텐츠 보여졌음');
|
|
1016
1337
|
* break;
|
|
1017
1338
|
* }
|
|
1018
1339
|
* },
|
|
@@ -1022,6 +1343,8 @@ type ShowAdMobRewardedAdParams = AdMobHandlerParams<ShowAdMobRewardedAdOptions,
|
|
|
1022
1343
|
* });
|
|
1023
1344
|
* }, []);
|
|
1024
1345
|
*
|
|
1346
|
+
* useFocusEffect(loadAd);
|
|
1347
|
+
*
|
|
1025
1348
|
* return (
|
|
1026
1349
|
* <View>
|
|
1027
1350
|
* <Text>
|
|
@@ -1030,15 +1353,14 @@ type ShowAdMobRewardedAdParams = AdMobHandlerParams<ShowAdMobRewardedAdOptions,
|
|
|
1030
1353
|
* {adLoadStatus === 'failed' && '광고 로드 실패'}
|
|
1031
1354
|
* </Text>
|
|
1032
1355
|
*
|
|
1033
|
-
* <Button title="Load Ad" onPress={loadAd} />
|
|
1034
1356
|
* <Button title="Show Ad" onPress={showAd} disabled={adLoadStatus !== 'loaded'} />
|
|
1035
1357
|
* </View>
|
|
1036
1358
|
* );
|
|
1037
1359
|
* }
|
|
1038
1360
|
* ```
|
|
1039
1361
|
*/
|
|
1040
|
-
declare function
|
|
1041
|
-
declare namespace
|
|
1362
|
+
declare function showAppsInTossAdMob(params: ShowAdMobParams): () => void;
|
|
1363
|
+
declare namespace showAppsInTossAdMob {
|
|
1042
1364
|
var isSupported: () => boolean;
|
|
1043
1365
|
}
|
|
1044
1366
|
|
|
@@ -2344,12 +2666,16 @@ declare const TossPay: {
|
|
|
2344
2666
|
* @property {typeof showAdMobInterstitialAd} [showAdMobInterstitialAd] 로드한 전면 광고를 보여주는 함수예요. 자세한 내용은 [showAdMobInterstitialAd](/react-native/reference/native-modules/광고/showAdMobInterstitialAd.html)를 참고하세요.
|
|
2345
2667
|
* @property {typeof loadAdMobRewardedAd} [loadAdMobRewardedAd] 보상형 광고를 로드하는 함수예요. 자세한 내용은 [loadAdMobRewardedAd](/react-native/reference/native-modules/광고/loadAdMobRewardedAd.html)를 참고하세요.
|
|
2346
2668
|
* @property {typeof showAdMobRewardedAd} [showAdMobRewardedAd] 로드한 보상형 광고를 보여주는 함수예요. 자세한 내용은 [showAdMobRewardedAd](/react-native/reference/native-modules/광고/showAdMobRewardedAd.html)를 참고하세요.
|
|
2669
|
+
* @property {typeof loadAppsInTossAdMob} [loadAppsInTossAdMob] 광고를 로드하는 함수예요. 자세한 내용은 [loadAppsInTossAdMob](/react-native/reference/native-modules/광고/loadAppsInTossAdMob.html)를 참고하세요.
|
|
2670
|
+
* @property {typeof showAppsInTossAdMob} [showAppsInTossAdMob] 로드한 광고를 보여주는 함수예요. 자세한 내용은 [showAppsInTossAdMob](/react-native/reference/native-modules/광고/showAppsInTossAdMob.html)를 참고하세요.
|
|
2347
2671
|
*/
|
|
2348
2672
|
declare const GoogleAdMob: {
|
|
2349
2673
|
loadAdMobInterstitialAd: typeof loadAdMobInterstitialAd;
|
|
2350
2674
|
showAdMobInterstitialAd: typeof showAdMobInterstitialAd;
|
|
2351
2675
|
loadAdMobRewardedAd: typeof loadAdMobRewardedAd;
|
|
2352
2676
|
showAdMobRewardedAd: typeof showAdMobRewardedAd;
|
|
2677
|
+
loadAppsInTossAdMob: typeof loadAppsInTossAdMob;
|
|
2678
|
+
showAppsInTossAdMob: typeof showAppsInTossAdMob;
|
|
2353
2679
|
};
|
|
2354
2680
|
|
|
2355
2681
|
/**
|
|
@@ -2817,4 +3143,4 @@ declare const INTERNAL__module: {
|
|
|
2817
3143
|
tossCoreEventLog: typeof tossCoreEventLog;
|
|
2818
3144
|
};
|
|
2819
3145
|
|
|
2820
|
-
export { Accuracy, AppsInTossModule, BedrockCoreModule, BedrockModule, type CheckoutPaymentOptions, type CheckoutPaymentResult, type ContactEntity, type ContactResult, type ContactsViralParams, type EventLogParams, type FetchAlbumPhotosOptions, type GameCenterGameProfileResponse, type GetCurrentLocationOptions, GoogleAdMob, type HapticFeedbackType, IAP, AppsInTossModuleInstance as INTERNAL__AppsInTossModule, INTERNAL__module, type IapCreateOneTimePurchaseOrderOptions, type IapCreateOneTimePurchaseOrderResult, type IapProductListItem, type ImageResponse, type LoadAdMobInterstitialAdEvent, type LoadAdMobInterstitialAdOptions, type LoadAdMobRewardedAdEvent, type LoadAdMobRewardedAdOptions, type Location, type LocationCoords, type NetworkStatus, type OpenCameraOptions, type PermissionAccess, type PermissionName, type PermissionStatus, type Primitive, type SaveBase64DataParams, type ShowAdMobInterstitialAdEvent, type ShowAdMobInterstitialAdOptions, type ShowAdMobRewardedAdEvent, type ShowAdMobRewardedAdOptions, type StartUpdateLocationOptions$1 as StartUpdateLocationOptions, type StartUpdateLocationSubscription, Storage, type SubmitGameCenterLeaderBoardScoreResponse, TossPay, type UpdateLocationEventEmitter, appLogin, appsInTossEvent, closeView, contactsViral, eventLog, fetchAlbumPhotos, fetchContacts, generateHapticFeedback, getClipboardText, getCurrentLocation, getDeviceId, getGameCenterGameProfile, getLocale, getNetworkStatus, getOperationalEnvironment, getPlatformOS, getSchemeUri, getTossAppVersion, getTossShareLink, isMinVersionSupported, onVisibilityChangedByTransparentServiceWeb, openCamera, openGameCenterLeaderboard, openURL, saveBase64Data, setClipboardText, setDeviceOrientation, setIosSwipeGestureEnabled, setScreenAwakeMode, setSecureScreen, share, startUpdateLocation, submitGameCenterLeaderBoardScore };
|
|
3146
|
+
export { Accuracy, AppsInTossModule, BedrockCoreModule, BedrockModule, type CheckoutPaymentOptions, type CheckoutPaymentResult, type ContactEntity, type ContactResult, type ContactsViralParams, type EventLogParams, type FetchAlbumPhotosOptions, type GameCenterGameProfileResponse, type GetCurrentLocationOptions, GoogleAdMob, type HapticFeedbackType, IAP, AppsInTossModuleInstance as INTERNAL__AppsInTossModule, INTERNAL__appBridgeHandler, INTERNAL__module, type IapCreateOneTimePurchaseOrderOptions, type IapCreateOneTimePurchaseOrderResult, type IapProductListItem, type ImageResponse, type LoadAdMobEvent, type LoadAdMobInterstitialAdEvent, type LoadAdMobInterstitialAdOptions, type LoadAdMobOptions, type LoadAdMobParams, type LoadAdMobRewardedAdEvent, type LoadAdMobRewardedAdOptions, type Location, type LocationCoords, type NetworkStatus, type OpenCameraOptions, type PermissionAccess, type PermissionName, type PermissionStatus, type Primitive, type SaveBase64DataParams, type ShowAdMobEvent, type ShowAdMobInterstitialAdEvent, type ShowAdMobInterstitialAdOptions, type ShowAdMobOptions, type ShowAdMobParams, type ShowAdMobRewardedAdEvent, type ShowAdMobRewardedAdOptions, type StartUpdateLocationOptions$1 as StartUpdateLocationOptions, type StartUpdateLocationSubscription, Storage, type SubmitGameCenterLeaderBoardScoreResponse, TossPay, type UpdateLocationEventEmitter, appLogin, appsInTossEvent, closeView, contactsViral, eventLog, fetchAlbumPhotos, fetchContacts, generateHapticFeedback, getClipboardText, getCurrentLocation, getDeviceId, getGameCenterGameProfile, getLocale, getNetworkStatus, getOperationalEnvironment, getPlatformOS, getSchemeUri, getTossAppVersion, getTossShareLink, isMinVersionSupported, onVisibilityChangedByTransparentServiceWeb, openCamera, openGameCenterLeaderboard, openURL, saveBase64Data, setClipboardText, setDeviceOrientation, setIosSwipeGestureEnabled, setScreenAwakeMode, setSecureScreen, share, startUpdateLocation, submitGameCenterLeaderBoardScore };
|