Explore all Messaging open source software, libraries, packages, source code, cloud functions and APIs.

Popular New Releases in Messaging

dubbo

dubbo-3.0.7

nats-server

Release v2.8.0

dubbo-spring-boot-project

Dubbo Spring Boot 2.7.9

Conversations

dubbo-go

v3.0.1

Popular Libraries in Messaging

dubbo

by apache doticonjavadoticon

star image 37142 doticonApache-2.0

Apache Dubbo is a high-performance, java based, open source RPC framework.

zheng

by shuzheng doticonjavadoticon

star image 16240 doticonMIT

基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构,提供整套公共微服务服务模块:集中权限管理(单点登录)、内容管理、支付中心、用户管理(支持第三方登录)、微信平台、存储系统、配置中心、日志分析、任务和通知等,支持服务治理、监控和追踪,努力为中小型企业打造全方位J2EE企业级开发解决方案。

springboot-learning-example

by JeffLi1993 doticonjavadoticon

star image 14289 doticonApache-2.0

spring boot 实践学习案例,是 spring boot 初学者及核心技术巩固的最佳实践。另外写博客,用 OpenWrite。

SpringBoot-Learning

by dyc87112 doticonjavadoticon

star image 13502 doticon

Spring Boot基础教程,Spring Boot 2.x版本连载中!!!

nats-server

by nats-io doticongodoticon

star image 10791 doticonApache-2.0

High-Performance server for NATS.io, the cloud and edge native messaging system.

disque

by antirez doticoncdoticon

star image 7781 doticonBSD-3-Clause

Disque is a distributed message broker

source-code-hunter

by doocs doticonjavadoticon

star image 6959 doticonCC-BY-SA-4.0

😱 从源码层面,剖析挖掘互联网行业主流技术的底层实现原理,为广大开发者 “提升技术深度” 提供便利。目前开放 Spring 全家桶,Mybatis、Netty、Dubbo 框架,及 Redis、Tomcat 中间件等

xmall

by Exrick doticonjavadoticon

star image 6296 doticonGPL-3.0

基于SOA架构的分布式电商购物商城 前后端分离 前台商城:Vue全家桶 后台管理系统:Dubbo/SSM/Elasticsearch/Redis/MySQL/ActiveMQ/Shiro/Zookeeper等

dubbo-spring-boot-project

by apache doticonjavadoticon

star image 5085 doticonApache-2.0

Spring Boot Project for Apache Dubbo

Trending New libraries in Messaging

threema-android

by threema-ch doticonjavadoticon

star image 610 doticonAGPL-3.0

Threema App for Android.

Mini-Conf

by Mini-Conf doticonjavascriptdoticon

star image 484 doticonMIT

Run a conference from your backyard.

JavaSpringBootSamples

by ipipman doticonjavadoticon

star image 483 doticon

SpringBoot、Dubbo、SpringCloud的各种集成例子:Atomikos、gRPC、Thrift、Seata、ShardingSphere、Dubbo、Hmily、Nacos、Consul、Ribbon、Jedis、Lettuce、Redisson等框架

FormatFuzzer

by uds-se doticonpythondoticon

star image 294 doticonNOASSERTION

FormatFuzzer is a framework for high-efficiency, high-quality generation and parsing of binary inputs.

App

by Expensify doticonjavascriptdoticon

star image 270 doticonMIT

Welcome to New Expensify: a complete re-imagination of financial collaboration, centered around chat. Help us build the next generation of Expensify by sharing feedback and contributing to the code.

privacy-guides

by sunknudsen doticonshelldoticon

star image 243 doticonMIT

Privacy guides reference material

code_reading

by Junedayday doticongodoticon

star image 212 doticon

code reading for go source code

transcoder

by floostack doticongodoticon

star image 206 doticonMIT

Transcoding library implementation in Golang

libxdc

by nyx-fuzz doticoncdoticon

star image 201 doticonMIT

The fastest Intel-PT decoder for fuzzing

Top Authors in Messaging

1

apache

25 Libraries

star icon55988

2

GoogleCloudPlatform

9 Libraries

star icon351

3

chafey

9 Libraries

star icon75

4

pydicom

9 Libraries

star icon445

5

realtime-framework

9 Libraries

star icon151

6

google

8 Libraries

star icon1500

7

cornerstonejs

8 Libraries

star icon3272

8

QIICR

6 Libraries

star icon48

9

nats-io

6 Libraries

star icon12734

10

ivmartel

6 Libraries

star icon1425

1

25 Libraries

star icon55988

2

9 Libraries

star icon351

3

9 Libraries

star icon75

4

9 Libraries

star icon445

5

9 Libraries

star icon151

6

8 Libraries

star icon1500

7

8 Libraries

star icon3272

8

6 Libraries

star icon48

9

6 Libraries

star icon12734

10

6 Libraries

star icon1425

Trending Kits in Messaging

No Trending Kits are available at this moment for Messaging

Trending Discussions on Messaging

Error APNS device token not set before retrieving FCM Token for Sender ID

java.lang.NoSuchMethodError: No virtual method setSkipClientToken(Z)V in class Lcom/facebook/GraphRequest;

How to register ServiceBusClient for dependency injection?

uploaded an APK which has an activity,activity alias,service or broadcast receiver with intentfilter, but without 'android : exported' property set

How to solve FirebaseError: Expected first argument to collection() to be a CollectionReference, a DocumentReference or FirebaseFirestore problem?

Mandatory Consent for Admob User Messaging Platform

MissingPluginException(No implementation found for method Messaging#requestPermission on channel firebase_messaging

Error in retrieving notification_key for group messaging in FCM

Firestore Push Notification "time out" error Notification doesn't always get sent

Google AdMob new SDK setup for iOS : SKAdNetworkItems, NSUserTrackingUsageDescription, ATTrackingManager. Guideline 5.1.2 - Legal - Privacy - Data Use

QUESTION

Error APNS device token not set before retrieving FCM Token for Sender ID

Asked 2022-Mar-01 at 17:08

I am receiving messages from firebase for notifications with APNs. In firebase, I have the certificate of APNs key, with the same id in the Xcode project in Firebase that is extracted from Apple Developer.

But I don't know why this could be happening and I get this error and it is registering two tokens in the Messaging extension:

1extension AppDelegate : MessagingDelegate {
2  func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {}}
3

APNS device token not set before retrieving FCM Token for Sender ID '########'. Notifications to this FCM Token will not be delivered over APNS.Be sure to re-retrieve the FCM token once the APNS device token is set.

Added what I have in the AppDelegate

1extension AppDelegate : MessagingDelegate {
2  func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {}}
3import Firebase
4import MasivPushIosSdk
5
6@UIApplicationMain
7class AppDelegate: UIResponder, UIApplicationDelegate{
8
9    var firebaseToken: String = ""
10    
11    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
12
13        FirebaseApp.configure()
14        self.registerForFirebaseNotification(application: application)
15        Messaging.messaging().delegate = self
16        return true
17    }
18    
19    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
20        Messaging.messaging().apnsToken = deviceToken
21    }
22
23    func registerForFirebaseNotification(application: UIApplication) {
24        if #available(iOS 10.0, *) {
25            // For iOS 10 display notification (sent via APNS)
26            UNUserNotificationCenter.current().delegate = self
27
28            let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
29            UNUserNotificationCenter.current().requestAuthorization(
30                options: authOptions,
31                completionHandler: {_, _ in })
32        } else {
33            let settings: UIUserNotificationSettings =
34                UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
35            application.registerUserNotificationSettings(settings)
36        }
37
38        application.registerForRemoteNotifications()
39    }
40    
41}
42
43extension AppDelegate: MessagingDelegate, UNUserNotificationCenterDelegate {
44
45//MessagingDelegate
46    func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
47        self.firebaseToken = fcmToken!
48        print("Firebase token: \(fcmToken)")
49    }
50
51    //UNUserNotificationCenterDelegate
52    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
53        print("APNs received with: \(userInfo)")
54     }
55}
56

ANSWER

Answered 2021-Oct-26 at 05:58

This is a simulator only log. You can safely ignore it. The reason you get this is that Firebase tries to create a mapping from the FCM token to the APNS token so it can send the APNS messages to the iOS devices. However, there is no APNS token on the simulator so the mapping fails.

Try testing it on an actual device to see if you still get the error.

Source https://stackoverflow.com/questions/69485088

QUESTION

java.lang.NoSuchMethodError: No virtual method setSkipClientToken(Z)V in class Lcom/facebook/GraphRequest;

Asked 2022-Feb-25 at 23:22

It was working fine before I have done nothing, no packages update, no gradle update no nothing just created new build and this error occurs. but for some team members the error occur after gradle sync.

The issue is that build is generating successfully without any error but when opens the app it suddenly gets crash (in both debug and release mode)

Error

1    E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
2        java.lang.NoSuchMethodError: No virtual method setSkipClientToken(Z)V in class Lcom/facebook/GraphRequest; or its super classes (declaration of 'com.facebook.GraphRequest' appears in /data/app/~~aLf3pfLySq5u7zpIAr2Hlg==/com.package-name-99h4GcP3GNx2sMs76AXGvA==/base.apk)
3            at com.facebook.marketing.internal.RemoteConfigManager.getRemoteConfigQueryResponse(RemoteConfigManager.java:87)
4            at com.facebook.marketing.internal.RemoteConfigManager.access$000(RemoteConfigManager.java:43)
5            at com.facebook.marketing.internal.RemoteConfigManager$1.run(RemoteConfigManager.java:64)
6            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
7            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
8            at java.lang.Thread.run(Thread.java:923)
9

gradle-wrapper.properties

1    E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
2        java.lang.NoSuchMethodError: No virtual method setSkipClientToken(Z)V in class Lcom/facebook/GraphRequest; or its super classes (declaration of 'com.facebook.GraphRequest' appears in /data/app/~~aLf3pfLySq5u7zpIAr2Hlg==/com.package-name-99h4GcP3GNx2sMs76AXGvA==/base.apk)
3            at com.facebook.marketing.internal.RemoteConfigManager.getRemoteConfigQueryResponse(RemoteConfigManager.java:87)
4            at com.facebook.marketing.internal.RemoteConfigManager.access$000(RemoteConfigManager.java:43)
5            at com.facebook.marketing.internal.RemoteConfigManager$1.run(RemoteConfigManager.java:64)
6            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
7            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
8            at java.lang.Thread.run(Thread.java:923)
9distributionBase=GRADLE_USER_HOME
10distributionPath=wrapper/dists
11distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip
12zipStoreBase=GRADLE_USER_HOME
13zipStorePath=wrapper/dists
14

build.gradle

1    E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
2        java.lang.NoSuchMethodError: No virtual method setSkipClientToken(Z)V in class Lcom/facebook/GraphRequest; or its super classes (declaration of 'com.facebook.GraphRequest' appears in /data/app/~~aLf3pfLySq5u7zpIAr2Hlg==/com.package-name-99h4GcP3GNx2sMs76AXGvA==/base.apk)
3            at com.facebook.marketing.internal.RemoteConfigManager.getRemoteConfigQueryResponse(RemoteConfigManager.java:87)
4            at com.facebook.marketing.internal.RemoteConfigManager.access$000(RemoteConfigManager.java:43)
5            at com.facebook.marketing.internal.RemoteConfigManager$1.run(RemoteConfigManager.java:64)
6            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
7            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
8            at java.lang.Thread.run(Thread.java:923)
9distributionBase=GRADLE_USER_HOME
10distributionPath=wrapper/dists
11distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip
12zipStoreBase=GRADLE_USER_HOME
13zipStorePath=wrapper/dists
14// Top-level build file where you can add configuration options common to all sub-projects/modules.
15
16buildscript {
17  ext {
18      buildToolsVersion = "30.0.2"
19      minSdkVersion = 21
20      compileSdkVersion = 30
21      targetSdkVersion = 30
22      ndkVersion = "21.4.7075529"
23  }
24  repositories {
25      google()
26      mavenCentral()
27      jcenter()
28      // maven {
29      //    url 'https://maven.fabric.io/public'
30      // }
31      maven { url "https://www.jitpack.io" }
32  }
33  dependencies {
34      classpath("com.android.tools.build:gradle:4.2.2")
35      classpath 'com.google.gms:google-services:4.2.0'  // Google Services plugin
36      // Add the Fabric Crashlytics plugin.
37      // classpath 'io.fabric.tools:gradle:1.31.2'
38      // firebase performance sdk
39      classpath 'com.google.firebase:perf-plugin:1.4.0'
40      classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'
41
42
43      // NOTE: Do not place your application dependencies here; they belong
44      // in the individual module build.gradle files
45  }
46}
47
48allprojects {
49  repositories {
50      mavenCentral()
51      mavenLocal()
52      maven {
53          // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
54          url("$rootDir/../node_modules/react-native/android")
55      }
56      maven {
57          // Android JSC is installed from npm
58          url("$rootDir/../node_modules/jsc-android/dist")
59      }
60
61      google()
62      jcenter()
63      maven { url 'https://www.jitpack.io' }
64  }
65}
66
67
68subprojects {
69  afterEvaluate {project ->
70      if (project.hasProperty("android")) {
71          android {
72              buildToolsVersion "28.0.3"
73              compileSdkVersion 28
74          }
75      }
76  }
77}
78
79subprojects {
80  afterEvaluate {project ->
81      if (project.hasProperty("android")) {
82          android {
83              compileSdkVersion 29
84              buildToolsVersion '29.0.3'
85          }
86      }
87  }
88}
89

packages

1    E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
2        java.lang.NoSuchMethodError: No virtual method setSkipClientToken(Z)V in class Lcom/facebook/GraphRequest; or its super classes (declaration of 'com.facebook.GraphRequest' appears in /data/app/~~aLf3pfLySq5u7zpIAr2Hlg==/com.package-name-99h4GcP3GNx2sMs76AXGvA==/base.apk)
3            at com.facebook.marketing.internal.RemoteConfigManager.getRemoteConfigQueryResponse(RemoteConfigManager.java:87)
4            at com.facebook.marketing.internal.RemoteConfigManager.access$000(RemoteConfigManager.java:43)
5            at com.facebook.marketing.internal.RemoteConfigManager$1.run(RemoteConfigManager.java:64)
6            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
7            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
8            at java.lang.Thread.run(Thread.java:923)
9distributionBase=GRADLE_USER_HOME
10distributionPath=wrapper/dists
11distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip
12zipStoreBase=GRADLE_USER_HOME
13zipStorePath=wrapper/dists
14// Top-level build file where you can add configuration options common to all sub-projects/modules.
15
16buildscript {
17  ext {
18      buildToolsVersion = "30.0.2"
19      minSdkVersion = 21
20      compileSdkVersion = 30
21      targetSdkVersion = 30
22      ndkVersion = "21.4.7075529"
23  }
24  repositories {
25      google()
26      mavenCentral()
27      jcenter()
28      // maven {
29      //    url 'https://maven.fabric.io/public'
30      // }
31      maven { url "https://www.jitpack.io" }
32  }
33  dependencies {
34      classpath("com.android.tools.build:gradle:4.2.2")
35      classpath 'com.google.gms:google-services:4.2.0'  // Google Services plugin
36      // Add the Fabric Crashlytics plugin.
37      // classpath 'io.fabric.tools:gradle:1.31.2'
38      // firebase performance sdk
39      classpath 'com.google.firebase:perf-plugin:1.4.0'
40      classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'
41
42
43      // NOTE: Do not place your application dependencies here; they belong
44      // in the individual module build.gradle files
45  }
46}
47
48allprojects {
49  repositories {
50      mavenCentral()
51      mavenLocal()
52      maven {
53          // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
54          url("$rootDir/../node_modules/react-native/android")
55      }
56      maven {
57          // Android JSC is installed from npm
58          url("$rootDir/../node_modules/jsc-android/dist")
59      }
60
61      google()
62      jcenter()
63      maven { url 'https://www.jitpack.io' }
64  }
65}
66
67
68subprojects {
69  afterEvaluate {project ->
70      if (project.hasProperty("android")) {
71          android {
72              buildToolsVersion "28.0.3"
73              compileSdkVersion 28
74          }
75      }
76  }
77}
78
79subprojects {
80  afterEvaluate {project ->
81      if (project.hasProperty("android")) {
82          android {
83              compileSdkVersion 29
84              buildToolsVersion '29.0.3'
85          }
86      }
87  }
88}
89"dependencies": {
90  "@eva-design/eva": "^2.1.0",
91  "@react-native-async-storage/async-storage": "^1.15.14",
92  "@react-native-community/blur": "^3.6.0",
93  "@react-native-community/checkbox": "^0.5.0",
94  "@react-native-community/netinfo": "^6.0.1",
95  "@react-native-community/toolbar-android": "^0.1.0-rc.2",
96  "@react-native-firebase/analytics": "^10.3.1",
97  "@react-native-firebase/app": "^10.3.0",
98  "@react-native-firebase/auth": "^10.3.1",
99  "@react-native-firebase/crashlytics": "^10.3.1",
100  "@react-native-firebase/dynamic-links": "^10.3.1",
101  "@react-native-firebase/firestore": "^10.3.1",
102  "@react-native-firebase/iid": "^10.3.1",
103  "@react-native-firebase/in-app-messaging": "^10.3.1",
104  "@react-native-firebase/messaging": "^10.3.1",
105  "@react-native-firebase/perf": "^10.3.1",
106  "@react-native-firebase/remote-config": "^10.3.1",
107  "@react-native-firebase/storage": "^10.3.1",
108  "@react-native-picker/picker": "^2.1.0",
109  "@react-navigation/bottom-tabs": "^6.0.9",
110  "@react-navigation/native": "^6.0.6",
111  "@react-navigation/stack": "^6.0.11",
112  "@types/react-native": "^0.65.5",
113  "@ui-kitten/components": "^5.1.0",
114  "axios": "^0.19.0",
115  "i18n-js": "^3.5.1",
116  "moment": "^2.24.0",
117  "native-base": "2.13.8",
118  "react": "17.0.2",
119  "react-content-loader": "^4.3.4",
120  "react-native": "0.66.0",
121  "react-native-actions-sheet": "^0.5.6",
122  "react-native-adjust": "^4.28.0",
123  "react-native-amplitude-analytics": "^0.2.7",
124  "react-native-animatable": "^1.3.3",
125  "react-native-code-push": "^7.0.4",
126  "react-native-config": "^1.3.3",
127  "react-native-contacts": "^5.0.7",
128  "react-native-dots-pagination": "^0.2.0",
129  "react-native-fbsdk-next": "^6.2.0",
130  "react-native-fingerprint-scanner": "^6.0.0",
131  "react-native-floating-action": "^1.22.0",
132  "react-native-geocoding": "^0.4.0",
133  "react-native-geolocation-service": "^5.2.0",
134  "react-native-gesture-handler": "^1.5.2",
135  "react-native-get-random-values": "^1.4.0",
136  "react-native-html-to-pdf-lite": "^0.11.0",
137  "react-native-image-base64": "^0.1.4",
138  "react-native-image-pan-zoom": "^2.1.11",
139  "react-native-image-picker": "^4.1.2",
140  "react-native-image-resizer": "^1.2.0",
141  "react-native-in-app-review": "^2.1.7",
142  "react-native-linear-gradient": "^2.5.6",
143  "react-native-loading-spinner-overlay": "^1.1.0",
144  "react-native-material-menu": "^1.0.0",
145  "react-native-material-textfield": "^0.16.1",
146  "react-native-modal": "^13.0.0",
147  "react-native-phone-call": "^1.0.9",
148  "react-native-ratings": "^7.3.0",
149  "react-native-reanimated": "^1.13.0",
150  "react-native-safe-area-context": "^3.3.2",
151  "react-native-screens": "^3.9.0",
152  "react-native-share": "^7.2.1",
153  "react-native-smooth-pincode-input": "^1.0.9",
154  "react-native-sms-retriever": "https://github.com/sarmad1995/react-native-sms-retriever.git",
155  "react-native-snap-carousel": "^3.9.1",
156  "react-native-splash-screen": "^3.2.0",
157  "react-native-svg": "^12.1.1",
158  "react-native-version-check": "^3.4.2",
159  "react-native-version-number": "^0.3.6",
160  "react-native-view-shot": "^3.1.2",
161  "react-native-walkthrough-tooltip": "^1.3.0",
162  "react-redux": "^7.1.3",
163  "redux": "^4.0.4",
164  "redux-logger": "^3.0.6",
165  "redux-persist": "^6.0.0",
166  "redux-thunk": "^2.3.0",
167  "rn-fetch-blob": "^0.12.0",
168  "urbanairship-react-native": "^12.0.0",
169  "uuid": "^8.3.0"
170},
171

ANSWER

Answered 2022-Feb-25 at 23:22

We have fixed the issue by replacing

1    E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
2        java.lang.NoSuchMethodError: No virtual method setSkipClientToken(Z)V in class Lcom/facebook/GraphRequest; or its super classes (declaration of 'com.facebook.GraphRequest' appears in /data/app/~~aLf3pfLySq5u7zpIAr2Hlg==/com.package-name-99h4GcP3GNx2sMs76AXGvA==/base.apk)
3            at com.facebook.marketing.internal.RemoteConfigManager.getRemoteConfigQueryResponse(RemoteConfigManager.java:87)
4            at com.facebook.marketing.internal.RemoteConfigManager.access$000(RemoteConfigManager.java:43)
5            at com.facebook.marketing.internal.RemoteConfigManager$1.run(RemoteConfigManager.java:64)
6            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
7            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
8            at java.lang.Thread.run(Thread.java:923)
9distributionBase=GRADLE_USER_HOME
10distributionPath=wrapper/dists
11distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip
12zipStoreBase=GRADLE_USER_HOME
13zipStorePath=wrapper/dists
14// Top-level build file where you can add configuration options common to all sub-projects/modules.
15
16buildscript {
17  ext {
18      buildToolsVersion = "30.0.2"
19      minSdkVersion = 21
20      compileSdkVersion = 30
21      targetSdkVersion = 30
22      ndkVersion = "21.4.7075529"
23  }
24  repositories {
25      google()
26      mavenCentral()
27      jcenter()
28      // maven {
29      //    url 'https://maven.fabric.io/public'
30      // }
31      maven { url "https://www.jitpack.io" }
32  }
33  dependencies {
34      classpath("com.android.tools.build:gradle:4.2.2")
35      classpath 'com.google.gms:google-services:4.2.0'  // Google Services plugin
36      // Add the Fabric Crashlytics plugin.
37      // classpath 'io.fabric.tools:gradle:1.31.2'
38      // firebase performance sdk
39      classpath 'com.google.firebase:perf-plugin:1.4.0'
40      classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'
41
42
43      // NOTE: Do not place your application dependencies here; they belong
44      // in the individual module build.gradle files
45  }
46}
47
48allprojects {
49  repositories {
50      mavenCentral()
51      mavenLocal()
52      maven {
53          // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
54          url("$rootDir/../node_modules/react-native/android")
55      }
56      maven {
57          // Android JSC is installed from npm
58          url("$rootDir/../node_modules/jsc-android/dist")
59      }
60
61      google()
62      jcenter()
63      maven { url 'https://www.jitpack.io' }
64  }
65}
66
67
68subprojects {
69  afterEvaluate {project ->
70      if (project.hasProperty("android")) {
71          android {
72              buildToolsVersion "28.0.3"
73              compileSdkVersion 28
74          }
75      }
76  }
77}
78
79subprojects {
80  afterEvaluate {project ->
81      if (project.hasProperty("android")) {
82          android {
83              compileSdkVersion 29
84              buildToolsVersion '29.0.3'
85          }
86      }
87  }
88}
89"dependencies": {
90  "@eva-design/eva": "^2.1.0",
91  "@react-native-async-storage/async-storage": "^1.15.14",
92  "@react-native-community/blur": "^3.6.0",
93  "@react-native-community/checkbox": "^0.5.0",
94  "@react-native-community/netinfo": "^6.0.1",
95  "@react-native-community/toolbar-android": "^0.1.0-rc.2",
96  "@react-native-firebase/analytics": "^10.3.1",
97  "@react-native-firebase/app": "^10.3.0",
98  "@react-native-firebase/auth": "^10.3.1",
99  "@react-native-firebase/crashlytics": "^10.3.1",
100  "@react-native-firebase/dynamic-links": "^10.3.1",
101  "@react-native-firebase/firestore": "^10.3.1",
102  "@react-native-firebase/iid": "^10.3.1",
103  "@react-native-firebase/in-app-messaging": "^10.3.1",
104  "@react-native-firebase/messaging": "^10.3.1",
105  "@react-native-firebase/perf": "^10.3.1",
106  "@react-native-firebase/remote-config": "^10.3.1",
107  "@react-native-firebase/storage": "^10.3.1",
108  "@react-native-picker/picker": "^2.1.0",
109  "@react-navigation/bottom-tabs": "^6.0.9",
110  "@react-navigation/native": "^6.0.6",
111  "@react-navigation/stack": "^6.0.11",
112  "@types/react-native": "^0.65.5",
113  "@ui-kitten/components": "^5.1.0",
114  "axios": "^0.19.0",
115  "i18n-js": "^3.5.1",
116  "moment": "^2.24.0",
117  "native-base": "2.13.8",
118  "react": "17.0.2",
119  "react-content-loader": "^4.3.4",
120  "react-native": "0.66.0",
121  "react-native-actions-sheet": "^0.5.6",
122  "react-native-adjust": "^4.28.0",
123  "react-native-amplitude-analytics": "^0.2.7",
124  "react-native-animatable": "^1.3.3",
125  "react-native-code-push": "^7.0.4",
126  "react-native-config": "^1.3.3",
127  "react-native-contacts": "^5.0.7",
128  "react-native-dots-pagination": "^0.2.0",
129  "react-native-fbsdk-next": "^6.2.0",
130  "react-native-fingerprint-scanner": "^6.0.0",
131  "react-native-floating-action": "^1.22.0",
132  "react-native-geocoding": "^0.4.0",
133  "react-native-geolocation-service": "^5.2.0",
134  "react-native-gesture-handler": "^1.5.2",
135  "react-native-get-random-values": "^1.4.0",
136  "react-native-html-to-pdf-lite": "^0.11.0",
137  "react-native-image-base64": "^0.1.4",
138  "react-native-image-pan-zoom": "^2.1.11",
139  "react-native-image-picker": "^4.1.2",
140  "react-native-image-resizer": "^1.2.0",
141  "react-native-in-app-review": "^2.1.7",
142  "react-native-linear-gradient": "^2.5.6",
143  "react-native-loading-spinner-overlay": "^1.1.0",
144  "react-native-material-menu": "^1.0.0",
145  "react-native-material-textfield": "^0.16.1",
146  "react-native-modal": "^13.0.0",
147  "react-native-phone-call": "^1.0.9",
148  "react-native-ratings": "^7.3.0",
149  "react-native-reanimated": "^1.13.0",
150  "react-native-safe-area-context": "^3.3.2",
151  "react-native-screens": "^3.9.0",
152  "react-native-share": "^7.2.1",
153  "react-native-smooth-pincode-input": "^1.0.9",
154  "react-native-sms-retriever": "https://github.com/sarmad1995/react-native-sms-retriever.git",
155  "react-native-snap-carousel": "^3.9.1",
156  "react-native-splash-screen": "^3.2.0",
157  "react-native-svg": "^12.1.1",
158  "react-native-version-check": "^3.4.2",
159  "react-native-version-number": "^0.3.6",
160  "react-native-view-shot": "^3.1.2",
161  "react-native-walkthrough-tooltip": "^1.3.0",
162  "react-redux": "^7.1.3",
163  "redux": "^4.0.4",
164  "redux-logger": "^3.0.6",
165  "redux-persist": "^6.0.0",
166  "redux-thunk": "^2.3.0",
167  "rn-fetch-blob": "^0.12.0",
168  "urbanairship-react-native": "^12.0.0",
169  "uuid": "^8.3.0"
170},
171implementation 'com.facebook.android:facebook-marketing:[4,5)'
172

by

1    E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
2        java.lang.NoSuchMethodError: No virtual method setSkipClientToken(Z)V in class Lcom/facebook/GraphRequest; or its super classes (declaration of 'com.facebook.GraphRequest' appears in /data/app/~~aLf3pfLySq5u7zpIAr2Hlg==/com.package-name-99h4GcP3GNx2sMs76AXGvA==/base.apk)
3            at com.facebook.marketing.internal.RemoteConfigManager.getRemoteConfigQueryResponse(RemoteConfigManager.java:87)
4            at com.facebook.marketing.internal.RemoteConfigManager.access$000(RemoteConfigManager.java:43)
5            at com.facebook.marketing.internal.RemoteConfigManager$1.run(RemoteConfigManager.java:64)
6            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
7            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
8            at java.lang.Thread.run(Thread.java:923)
9distributionBase=GRADLE_USER_HOME
10distributionPath=wrapper/dists
11distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip
12zipStoreBase=GRADLE_USER_HOME
13zipStorePath=wrapper/dists
14// Top-level build file where you can add configuration options common to all sub-projects/modules.
15
16buildscript {
17  ext {
18      buildToolsVersion = "30.0.2"
19      minSdkVersion = 21
20      compileSdkVersion = 30
21      targetSdkVersion = 30
22      ndkVersion = "21.4.7075529"
23  }
24  repositories {
25      google()
26      mavenCentral()
27      jcenter()
28      // maven {
29      //    url 'https://maven.fabric.io/public'
30      // }
31      maven { url "https://www.jitpack.io" }
32  }
33  dependencies {
34      classpath("com.android.tools.build:gradle:4.2.2")
35      classpath 'com.google.gms:google-services:4.2.0'  // Google Services plugin
36      // Add the Fabric Crashlytics plugin.
37      // classpath 'io.fabric.tools:gradle:1.31.2'
38      // firebase performance sdk
39      classpath 'com.google.firebase:perf-plugin:1.4.0'
40      classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'
41
42
43      // NOTE: Do not place your application dependencies here; they belong
44      // in the individual module build.gradle files
45  }
46}
47
48allprojects {
49  repositories {
50      mavenCentral()
51      mavenLocal()
52      maven {
53          // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
54          url("$rootDir/../node_modules/react-native/android")
55      }
56      maven {
57          // Android JSC is installed from npm
58          url("$rootDir/../node_modules/jsc-android/dist")
59      }
60
61      google()
62      jcenter()
63      maven { url 'https://www.jitpack.io' }
64  }
65}
66
67
68subprojects {
69  afterEvaluate {project ->
70      if (project.hasProperty("android")) {
71          android {
72              buildToolsVersion "28.0.3"
73              compileSdkVersion 28
74          }
75      }
76  }
77}
78
79subprojects {
80  afterEvaluate {project ->
81      if (project.hasProperty("android")) {
82          android {
83              compileSdkVersion 29
84              buildToolsVersion '29.0.3'
85          }
86      }
87  }
88}
89"dependencies": {
90  "@eva-design/eva": "^2.1.0",
91  "@react-native-async-storage/async-storage": "^1.15.14",
92  "@react-native-community/blur": "^3.6.0",
93  "@react-native-community/checkbox": "^0.5.0",
94  "@react-native-community/netinfo": "^6.0.1",
95  "@react-native-community/toolbar-android": "^0.1.0-rc.2",
96  "@react-native-firebase/analytics": "^10.3.1",
97  "@react-native-firebase/app": "^10.3.0",
98  "@react-native-firebase/auth": "^10.3.1",
99  "@react-native-firebase/crashlytics": "^10.3.1",
100  "@react-native-firebase/dynamic-links": "^10.3.1",
101  "@react-native-firebase/firestore": "^10.3.1",
102  "@react-native-firebase/iid": "^10.3.1",
103  "@react-native-firebase/in-app-messaging": "^10.3.1",
104  "@react-native-firebase/messaging": "^10.3.1",
105  "@react-native-firebase/perf": "^10.3.1",
106  "@react-native-firebase/remote-config": "^10.3.1",
107  "@react-native-firebase/storage": "^10.3.1",
108  "@react-native-picker/picker": "^2.1.0",
109  "@react-navigation/bottom-tabs": "^6.0.9",
110  "@react-navigation/native": "^6.0.6",
111  "@react-navigation/stack": "^6.0.11",
112  "@types/react-native": "^0.65.5",
113  "@ui-kitten/components": "^5.1.0",
114  "axios": "^0.19.0",
115  "i18n-js": "^3.5.1",
116  "moment": "^2.24.0",
117  "native-base": "2.13.8",
118  "react": "17.0.2",
119  "react-content-loader": "^4.3.4",
120  "react-native": "0.66.0",
121  "react-native-actions-sheet": "^0.5.6",
122  "react-native-adjust": "^4.28.0",
123  "react-native-amplitude-analytics": "^0.2.7",
124  "react-native-animatable": "^1.3.3",
125  "react-native-code-push": "^7.0.4",
126  "react-native-config": "^1.3.3",
127  "react-native-contacts": "^5.0.7",
128  "react-native-dots-pagination": "^0.2.0",
129  "react-native-fbsdk-next": "^6.2.0",
130  "react-native-fingerprint-scanner": "^6.0.0",
131  "react-native-floating-action": "^1.22.0",
132  "react-native-geocoding": "^0.4.0",
133  "react-native-geolocation-service": "^5.2.0",
134  "react-native-gesture-handler": "^1.5.2",
135  "react-native-get-random-values": "^1.4.0",
136  "react-native-html-to-pdf-lite": "^0.11.0",
137  "react-native-image-base64": "^0.1.4",
138  "react-native-image-pan-zoom": "^2.1.11",
139  "react-native-image-picker": "^4.1.2",
140  "react-native-image-resizer": "^1.2.0",
141  "react-native-in-app-review": "^2.1.7",
142  "react-native-linear-gradient": "^2.5.6",
143  "react-native-loading-spinner-overlay": "^1.1.0",
144  "react-native-material-menu": "^1.0.0",
145  "react-native-material-textfield": "^0.16.1",
146  "react-native-modal": "^13.0.0",
147  "react-native-phone-call": "^1.0.9",
148  "react-native-ratings": "^7.3.0",
149  "react-native-reanimated": "^1.13.0",
150  "react-native-safe-area-context": "^3.3.2",
151  "react-native-screens": "^3.9.0",
152  "react-native-share": "^7.2.1",
153  "react-native-smooth-pincode-input": "^1.0.9",
154  "react-native-sms-retriever": "https://github.com/sarmad1995/react-native-sms-retriever.git",
155  "react-native-snap-carousel": "^3.9.1",
156  "react-native-splash-screen": "^3.2.0",
157  "react-native-svg": "^12.1.1",
158  "react-native-version-check": "^3.4.2",
159  "react-native-version-number": "^0.3.6",
160  "react-native-view-shot": "^3.1.2",
161  "react-native-walkthrough-tooltip": "^1.3.0",
162  "react-redux": "^7.1.3",
163  "redux": "^4.0.4",
164  "redux-logger": "^3.0.6",
165  "redux-persist": "^6.0.0",
166  "redux-thunk": "^2.3.0",
167  "rn-fetch-blob": "^0.12.0",
168  "urbanairship-react-native": "^12.0.0",
169  "uuid": "^8.3.0"
170},
171implementation 'com.facebook.android:facebook-marketing:[4,5)'
172implementation 'com.facebook.android:facebook-marketing:latest.release'
173

in android/app/build.gradle file.

Posted this so someone out there facing the same problem will find the solution easily. It took me and my team around one and a half day to figure it out as there is no clear solution out there.

Solution Ref: here

Source https://stackoverflow.com/questions/71256006

QUESTION

How to register ServiceBusClient for dependency injection?

Asked 2022-Feb-08 at 14:11

I’m trying to register ServiceBusClient from the new Azure.Messaging.ServiceBus package for dependency injection as recommended in this article using ServiceBusClientBuilderExtensions, but I can’t find any documentation or any help online on how exactly to go about this.

I'm trying to add as below

1public override void Configure(IFunctionsHostBuilder builder)
2{
3    ServiceBusClientBuilderExtensions.AddServiceBusClient(builder, Typsy.Domain.Configuration.Settings.Instance().Connections.ServiceBusPrimary);
4}
5

but I'm getting the error

The type 'Microsoft.Azure.Functions.Extensions.DependencyInjection.IFunctionsHostBuilder' must be convertible to 'Azure.Core.Extensions.IAzureClientFactoryBuilder' in order to use it as parameter 'TBuilder' in the generic method 'IAzureClientBuilder<ServiceBusClient,ServiceBusClientOptions> Microsoft.Extensions.Azure.ServiceBusClientBuilderExtensions.AddServiceBusClient(this TBuilder, string)'

enter image description here

If anyone can help with this that'll be great!

ANSWER

Answered 2021-Sep-02 at 20:03

ServiceBusClientBuilderExtensions.AddServiceBusClient is an extension method of IAzureClientFactoryBuilder:

1public override void Configure(IFunctionsHostBuilder builder)
2{
3    ServiceBusClientBuilderExtensions.AddServiceBusClient(builder, Typsy.Domain.Configuration.Settings.Instance().Connections.ServiceBusPrimary);
4}
5public static IAzureClientBuilder&lt;ServiceBusClient, ServiceBusClientOptions&gt; AddServiceBusClient&lt;TBuilder&gt;(this TBuilder builder, string connectionString)
6            where TBuilder : IAzureClientFactoryBuilder
7

To get an instance of IAzureClientFactoryBuilder, you need to call AzureClientServiceCollectionExtensions.AddAzureClients(IServiceCollection, Action<AzureClientFactoryBuilder>) for a given IServiceCollection, which provides a delegate giving an instance of IAzureClientFactoryBuilder. (this method is in the Microsoft.Extensions.Azure NuGet package)

To call that method, you can use the IServiceCollection provided by IFunctionsHostBuilder. With all of that, what you have should look something like:

1public override void Configure(IFunctionsHostBuilder builder)
2{
3    ServiceBusClientBuilderExtensions.AddServiceBusClient(builder, Typsy.Domain.Configuration.Settings.Instance().Connections.ServiceBusPrimary);
4}
5public static IAzureClientBuilder&lt;ServiceBusClient, ServiceBusClientOptions&gt; AddServiceBusClient&lt;TBuilder&gt;(this TBuilder builder, string connectionString)
6            where TBuilder : IAzureClientFactoryBuilder
7public override void Configure(IFunctionsHostBuilder builder)
8{
9    builder.Services.AddAzureClients(clientsBuilder =&gt;
10    {
11        clientsBuilder.AddServiceBusClient(Typsy.Domain.Configuration.Settings.Instance().Connections.ServiceBusPrimary)
12          // (Optional) Provide name for instance to retrieve by with DI
13          .WithName(&quot;Client1Name&quot;)
14          // (Optional) Override ServiceBusClientOptions (e.g. change retry settings)
15          .ConfigureOptions(options =&gt;
16          {
17              options.RetryOptions.Delay = TimeSpan.FromMilliseconds(50);
18              options.RetryOptions.MaxDelay = TimeSpan.FromSeconds(5);
19              options.RetryOptions.MaxRetries = 3;
20          });
21    });
22}
23

To retrieve the named instance, instead of using ServiceBusClient as the injected type you use IAzureClientFactory<ServiceBusClient>. The ServiceBusClient is a Singleton regardless of whether you use a named instance or not.

1public override void Configure(IFunctionsHostBuilder builder)
2{
3    ServiceBusClientBuilderExtensions.AddServiceBusClient(builder, Typsy.Domain.Configuration.Settings.Instance().Connections.ServiceBusPrimary);
4}
5public static IAzureClientBuilder&lt;ServiceBusClient, ServiceBusClientOptions&gt; AddServiceBusClient&lt;TBuilder&gt;(this TBuilder builder, string connectionString)
6            where TBuilder : IAzureClientFactoryBuilder
7public override void Configure(IFunctionsHostBuilder builder)
8{
9    builder.Services.AddAzureClients(clientsBuilder =&gt;
10    {
11        clientsBuilder.AddServiceBusClient(Typsy.Domain.Configuration.Settings.Instance().Connections.ServiceBusPrimary)
12          // (Optional) Provide name for instance to retrieve by with DI
13          .WithName(&quot;Client1Name&quot;)
14          // (Optional) Override ServiceBusClientOptions (e.g. change retry settings)
15          .ConfigureOptions(options =&gt;
16          {
17              options.RetryOptions.Delay = TimeSpan.FromMilliseconds(50);
18              options.RetryOptions.MaxDelay = TimeSpan.FromSeconds(5);
19              options.RetryOptions.MaxRetries = 3;
20          });
21    });
22}
23 public Constructor(IAzureClientFactory&lt;ServiceBusClient&gt; serviceBusClientFactory)
24 {
25     // Wherever you need the ServiceBusClient
26     ServiceBusClient singletonClient1 = serviceBusClientFactory.CreateClient(&quot;Client1Name&quot;)
27 }
28

Source https://stackoverflow.com/questions/68688838

QUESTION

uploaded an APK which has an activity,activity alias,service or broadcast receiver with intentfilter, but without 'android : exported' property set

Asked 2022-Feb-03 at 10:56

I'm having an issue when i'm uploading app bundle to the play console that You uploaded an APK or Android App Bundle which has an activity, activity alias, service or broadcast receiver with intent filter, but without 'android:exported' property set. This file can't be installed on Android 12 or higher. but my manifest file includes the property.

Manifest file

1    &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
2    &lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
3        package=&quot;**********&quot;&gt;
4        &lt;!-- io.flutter.app.FlutterApplication is an android.app.Application that
5             calls FlutterMain.startInitialization(this); in its onCreate method.
6             In most cases you can leave this as-is, but you if you want to provide
7             additional functionality it is fine to subclass or reimplement
8             FlutterApplication and put your custom class here. --&gt;
9        &lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; /&gt;
10        &lt;uses-permission android:name=&quot;android.permission.CAMERA&quot; /&gt;
11        &lt;uses-feature android:name=&quot;android.hardware.camera&quot; /&gt;
12        &lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot; /&gt;
13        &lt;uses-permission android:name=&quot;android.permission.READ_EXTERNAL_STORAGE&quot; /&gt;
14        &lt;uses-permission android:name=&quot;android.permission.ACCESS_FINE_LOCATION&quot; /&gt;
15        &lt;uses-permission android:name=&quot;android.permission.ACCESS_COARSE_LOCATION&quot; /&gt;
16        &lt;uses-permission android:name=&quot;android.permission.ACCESS_BACKGROUND_LOCATION&quot; /&gt;
17        &lt;uses-permission android:name=&quot;android.permission.WAKE_LOCK&quot;/&gt;
18        &lt;uses-permission android:name=&quot;android.permission.FOREGROUND_SERVICE&quot;/&gt;
19        &lt;uses-permission android:name=&quot;android.permission.VIBRATE&quot; /&gt;
20        &lt;uses-permission android:name=&quot;android.permission.RECEIVE_BOOT_COMPLETED&quot;/&gt;
21        &lt;uses-permission android:name=&quot;android.permission.WAKE_LOCK&quot; /&gt;
22        &lt;uses-permission android:name=&quot;android.permission.ACTIVITY_RECOGNITION&quot; /&gt;
23        &lt;uses-permission android:name=&quot;com.google.android.gms.permission.ACTIVITY_RECOGNITION&quot; /&gt;
24    
25    
26        &lt;application
27            android:name=&quot;io.flutter.app.FlutterApplication&quot;
28            android:label=&quot;*****&quot;
29            android:requestLegacyExternalStorage=&quot;true&quot;
30            android:usesCleartextTraffic=&quot;true&quot;
31            android:icon=&quot;@mipmap/ic_launcher&quot;&gt;
32    
33    
34            &lt;meta-data
35              android:name=&quot;com.google.firebase.messaging.default_notification_icon&quot;
36              android:resource=&quot;@drawable/ic_stat_artboard_1&quot; /&gt;
37    
38            &lt;meta-data android:name=&quot;com.google.android.geo.API_KEY&quot;
39                android:value=&quot;Z*********&quot;/&gt;
40    
41            &lt;provider
42                android:name=&quot;vn.hunghd.flutterdownloader.DownloadedFileProvider&quot;
43                android:authorities=&quot;im.mingguang.mingguang_app.flutter_downloader.provider&quot;
44                android:grantUriPermissions=&quot;true&quot;
45                android:requestLegacyExternalStorage=&quot;true&quot;&gt;
46                &lt;meta-data
47                    android:name=&quot;android.support.FILE_PROVIDER_PATHS&quot;
48                    android:resource=&quot;@xml/provider_paths&quot;/&gt;
49            &lt;/provider&gt;
50    
51            &lt;provider
52        android:name=&quot;androidx.core.content.FileProvider&quot;
53        android:authorities=&quot;${applicationId}.provider&quot;
54        android:grantUriPermissions=&quot;true&quot;&gt;
55        &lt;meta-data
56            android:name=&quot;android.support.FILE_PROVIDER_PATHS&quot;
57            android:resource=&quot;@xml/provider_paths&quot;/&gt;
58    &lt;/provider&gt;
59            &lt;activity
60                android:name=&quot;.MainActivity&quot;
61                android:launchMode=&quot;singleTop&quot;
62                android:theme=&quot;@style/LaunchTheme&quot;
63                android:configChanges=&quot;orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode&quot;
64                android:hardwareAccelerated=&quot;true&quot;
65                android:exported=&quot;true&quot;
66                android:windowSoftInputMode=&quot;adjustResize&quot;&gt;
67                &lt;intent-filter&gt;
68                    &lt;action android:name=&quot;android.intent.action.MAIN&quot;/&gt;
69                    &lt;category android:name=&quot;android.intent.category.DEFAULT&quot;/&gt;
70                    &lt;category android:name=&quot;android.intent.category.LAUNCHER&quot;/&gt;
71                &lt;/intent-filter&gt;
72                &lt;intent-filter&gt;
73                    &lt;action android:name=&quot;FLUTTER_NOTIFICATION_CLICK&quot; /&gt;
74                    &lt;category android:name=&quot;android.intent.category.DEFAULT&quot;/&gt;
75                &lt;/intent-filter&gt;
76            &lt;/activity&gt;
77            &lt;!-- Don't delete the meta-data below.
78                 This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --&gt;
79            &lt;meta-data
80                android:name=&quot;flutterEmbedding&quot;
81                android:value=&quot;2&quot; /&gt;
82        &lt;/application&gt;
83    &lt;/manifest&gt;
84

Play Console Error

enter image description here

ANSWER

Answered 2022-Jan-12 at 23:56

I face the same Issue but i solved by writing android:exported="true" in activity bellow the android:name=".MainActivity" image shown

Source https://stackoverflow.com/questions/70684516

QUESTION

How to solve FirebaseError: Expected first argument to collection() to be a CollectionReference, a DocumentReference or FirebaseFirestore problem?

Asked 2022-Jan-11 at 15:08

I am trying to set up Firebase with next.js. I am getting this error in the console.

FirebaseError: Expected first argument to collection() to be a CollectionReference, a DocumentReference or FirebaseFirestore

This is one of my custom hook

1import { onAuthStateChanged, User } from '@firebase/auth'
2import { doc, onSnapshot, Unsubscribe } from 'firebase/firestore'
3import { useEffect, useState } from 'react'
4import { auth, fireStore } from './firebase'
5
6export const useUserData = () =&gt; {
7  const [username, setUsername] = useState&lt;string | null&gt;(null)
8
9  const [currentUser, setCurrentUser] = useState&lt;User | null&gt;(null)
10
11  useEffect(() =&gt; {
12    let unsubscribe: void | Unsubscribe
13
14    onAuthStateChanged(auth, (user) =&gt; {
15      if (user) {
16        setCurrentUser(user)
17        // The Problem is inside this try blog
18        try {
19          // the onsnapshot function is causing the problem
20          console.log('firestore: ', fireStore)
21          unsubscribe = onSnapshot(doc(fireStore, 'users', user.uid), (doc) =&gt; {
22            setUsername(doc.data()?.username)
23          })
24        } catch (e) {
25          console.log(e.message)
26        }
27      } else {
28        setCurrentUser(null)
29        setUsername(null)
30      }
31    })
32
33    return unsubscribe
34  }, [currentUser])
35
36  return { currentUser, username }
37}
38

I also have this firebase.ts file where I initialized my firebase app

1import { onAuthStateChanged, User } from '@firebase/auth'
2import { doc, onSnapshot, Unsubscribe } from 'firebase/firestore'
3import { useEffect, useState } from 'react'
4import { auth, fireStore } from './firebase'
5
6export const useUserData = () =&gt; {
7  const [username, setUsername] = useState&lt;string | null&gt;(null)
8
9  const [currentUser, setCurrentUser] = useState&lt;User | null&gt;(null)
10
11  useEffect(() =&gt; {
12    let unsubscribe: void | Unsubscribe
13
14    onAuthStateChanged(auth, (user) =&gt; {
15      if (user) {
16        setCurrentUser(user)
17        // The Problem is inside this try blog
18        try {
19          // the onsnapshot function is causing the problem
20          console.log('firestore: ', fireStore)
21          unsubscribe = onSnapshot(doc(fireStore, 'users', user.uid), (doc) =&gt; {
22            setUsername(doc.data()?.username)
23          })
24        } catch (e) {
25          console.log(e.message)
26        }
27      } else {
28        setCurrentUser(null)
29        setUsername(null)
30      }
31    })
32
33    return unsubscribe
34  }, [currentUser])
35
36  return { currentUser, username }
37}
38import { FirebaseApp, getApps, initializeApp } from 'firebase/app'
39import { getAuth } from 'firebase/auth'
40import { getFirestore } from 'firebase/firestore/lite'
41import { getStorage } from 'firebase/storage'
42
43const firebaseConfig = {
44  apiKey: 'some-api',
45  authDomain: 'some-auth-domain',
46  projectId: 'some-project-id',
47  storageBucket: 'some-storage-bucket',
48  messagingSenderId: 'some-id',
49  appId: 'some-app-id',
50  measurementId: 'some-measurement-id',
51}
52
53let firebaseApp: FirebaseApp
54
55if (!getApps.length) {
56  firebaseApp = initializeApp(firebaseConfig)
57}
58
59const fireStore = getFirestore(firebaseApp)
60const auth = getAuth(firebaseApp)
61const storage = getStorage(firebaseApp)
62
63export { fireStore, auth, storage }
64

I don't know whether the problem is in the project initialization. I am pretty sure the error is generated from my custom hook file. I also found out that there must be something wrong with onSnapshot function. Am I passing the docRef wrong or something? What am I doing wrong here?

The console.log(firestore) log:

1import { onAuthStateChanged, User } from '@firebase/auth'
2import { doc, onSnapshot, Unsubscribe } from 'firebase/firestore'
3import { useEffect, useState } from 'react'
4import { auth, fireStore } from './firebase'
5
6export const useUserData = () =&gt; {
7  const [username, setUsername] = useState&lt;string | null&gt;(null)
8
9  const [currentUser, setCurrentUser] = useState&lt;User | null&gt;(null)
10
11  useEffect(() =&gt; {
12    let unsubscribe: void | Unsubscribe
13
14    onAuthStateChanged(auth, (user) =&gt; {
15      if (user) {
16        setCurrentUser(user)
17        // The Problem is inside this try blog
18        try {
19          // the onsnapshot function is causing the problem
20          console.log('firestore: ', fireStore)
21          unsubscribe = onSnapshot(doc(fireStore, 'users', user.uid), (doc) =&gt; {
22            setUsername(doc.data()?.username)
23          })
24        } catch (e) {
25          console.log(e.message)
26        }
27      } else {
28        setCurrentUser(null)
29        setUsername(null)
30      }
31    })
32
33    return unsubscribe
34  }, [currentUser])
35
36  return { currentUser, username }
37}
38import { FirebaseApp, getApps, initializeApp } from 'firebase/app'
39import { getAuth } from 'firebase/auth'
40import { getFirestore } from 'firebase/firestore/lite'
41import { getStorage } from 'firebase/storage'
42
43const firebaseConfig = {
44  apiKey: 'some-api',
45  authDomain: 'some-auth-domain',
46  projectId: 'some-project-id',
47  storageBucket: 'some-storage-bucket',
48  messagingSenderId: 'some-id',
49  appId: 'some-app-id',
50  measurementId: 'some-measurement-id',
51}
52
53let firebaseApp: FirebaseApp
54
55if (!getApps.length) {
56  firebaseApp = initializeApp(firebaseConfig)
57}
58
59const fireStore = getFirestore(firebaseApp)
60const auth = getAuth(firebaseApp)
61const storage = getStorage(firebaseApp)
62
63export { fireStore, auth, storage }
64
65    type: &quot;firestore-lite&quot;
66    _app: FirebaseAppImpl
67    _automaticDataCollectionEnabled: false
68    _config: {name: &quot;[DEFAULT]&quot;, automaticDataCollectionEnabled: false}
69    _container: ComponentContainer {name: &quot;[DEFAULT]&quot;, providers: Map(15)}
70    _isDeleted: false
71    _name: &quot;[DEFAULT]&quot;
72    _options:
73    apiKey: 'some-api'
74    authDomain: 'some-auth-domain'
75    projectId: 'some-project-id'
76    storageBucket: 'some-storage-bucket'
77    messagingSenderId: 'some-id'
78    appId: 'some-app-id'
79    measurementId: 'some-measurement-id'
80    [[Prototype]]: Object
81    automaticDataCollectionEnabled: (...)
82    config: (...)
83    container: (...)
84    isDeleted: (...)
85    name: (...)
86    options: (...)
87    [[Prototype]]: Object
88    _credentials: Q {auth: AuthInterop}
89    _databaseId: H {projectId: &quot;next-firebase-fireship&quot;, database: &quot;(default)&quot;}
90    _persistenceKey: &quot;(lite)&quot;
91    _settings: ee {host: &quot;firestore.googleapis.com&quot;, ssl: true, credentials: undefined, ignoreUndefinedProperties: false, cacheSizeBytes: 41943040, …}
92    _settingsFrozen: false
93    app: (...)
94    _initialized: (...)
95    _terminated: (...)
96
97

ANSWER

Answered 2022-Jan-07 at 19:07

Using getFirestore from lite library will not work with onSnapshot. You are importing getFirestore from lite version:

1import { onAuthStateChanged, User } from '@firebase/auth'
2import { doc, onSnapshot, Unsubscribe } from 'firebase/firestore'
3import { useEffect, useState } from 'react'
4import { auth, fireStore } from './firebase'
5
6export const useUserData = () =&gt; {
7  const [username, setUsername] = useState&lt;string | null&gt;(null)
8
9  const [currentUser, setCurrentUser] = useState&lt;User | null&gt;(null)
10
11  useEffect(() =&gt; {
12    let unsubscribe: void | Unsubscribe
13
14    onAuthStateChanged(auth, (user) =&gt; {
15      if (user) {
16        setCurrentUser(user)
17        // The Problem is inside this try blog
18        try {
19          // the onsnapshot function is causing the problem
20          console.log('firestore: ', fireStore)
21          unsubscribe = onSnapshot(doc(fireStore, 'users', user.uid), (doc) =&gt; {
22            setUsername(doc.data()?.username)
23          })
24        } catch (e) {
25          console.log(e.message)
26        }
27      } else {
28        setCurrentUser(null)
29        setUsername(null)
30      }
31    })
32
33    return unsubscribe
34  }, [currentUser])
35
36  return { currentUser, username }
37}
38import { FirebaseApp, getApps, initializeApp } from 'firebase/app'
39import { getAuth } from 'firebase/auth'
40import { getFirestore } from 'firebase/firestore/lite'
41import { getStorage } from 'firebase/storage'
42
43const firebaseConfig = {
44  apiKey: 'some-api',
45  authDomain: 'some-auth-domain',
46  projectId: 'some-project-id',
47  storageBucket: 'some-storage-bucket',
48  messagingSenderId: 'some-id',
49  appId: 'some-app-id',
50  measurementId: 'some-measurement-id',
51}
52
53let firebaseApp: FirebaseApp
54
55if (!getApps.length) {
56  firebaseApp = initializeApp(firebaseConfig)
57}
58
59const fireStore = getFirestore(firebaseApp)
60const auth = getAuth(firebaseApp)
61const storage = getStorage(firebaseApp)
62
63export { fireStore, auth, storage }
64
65    type: &quot;firestore-lite&quot;
66    _app: FirebaseAppImpl
67    _automaticDataCollectionEnabled: false
68    _config: {name: &quot;[DEFAULT]&quot;, automaticDataCollectionEnabled: false}
69    _container: ComponentContainer {name: &quot;[DEFAULT]&quot;, providers: Map(15)}
70    _isDeleted: false
71    _name: &quot;[DEFAULT]&quot;
72    _options:
73    apiKey: 'some-api'
74    authDomain: 'some-auth-domain'
75    projectId: 'some-project-id'
76    storageBucket: 'some-storage-bucket'
77    messagingSenderId: 'some-id'
78    appId: 'some-app-id'
79    measurementId: 'some-measurement-id'
80    [[Prototype]]: Object
81    automaticDataCollectionEnabled: (...)
82    config: (...)
83    container: (...)
84    isDeleted: (...)
85    name: (...)
86    options: (...)
87    [[Prototype]]: Object
88    _credentials: Q {auth: AuthInterop}
89    _databaseId: H {projectId: &quot;next-firebase-fireship&quot;, database: &quot;(default)&quot;}
90    _persistenceKey: &quot;(lite)&quot;
91    _settings: ee {host: &quot;firestore.googleapis.com&quot;, ssl: true, credentials: undefined, ignoreUndefinedProperties: false, cacheSizeBytes: 41943040, …}
92    _settingsFrozen: false
93    app: (...)
94    _initialized: (...)
95    _terminated: (...)
96
97import { getFirestore } from 'firebase/firestore/lite'
98

Change the import to:

1import { onAuthStateChanged, User } from '@firebase/auth'
2import { doc, onSnapshot, Unsubscribe } from 'firebase/firestore'
3import { useEffect, useState } from 'react'
4import { auth, fireStore } from './firebase'
5
6export const useUserData = () =&gt; {
7  const [username, setUsername] = useState&lt;string | null&gt;(null)
8
9  const [currentUser, setCurrentUser] = useState&lt;User | null&gt;(null)
10
11  useEffect(() =&gt; {
12    let unsubscribe: void | Unsubscribe
13
14    onAuthStateChanged(auth, (user) =&gt; {
15      if (user) {
16        setCurrentUser(user)
17        // The Problem is inside this try blog
18        try {
19          // the onsnapshot function is causing the problem
20          console.log('firestore: ', fireStore)
21          unsubscribe = onSnapshot(doc(fireStore, 'users', user.uid), (doc) =&gt; {
22            setUsername(doc.data()?.username)
23          })
24        } catch (e) {
25          console.log(e.message)
26        }
27      } else {
28        setCurrentUser(null)
29        setUsername(null)
30      }
31    })
32
33    return unsubscribe
34  }, [currentUser])
35
36  return { currentUser, username }
37}
38import { FirebaseApp, getApps, initializeApp } from 'firebase/app'
39import { getAuth } from 'firebase/auth'
40import { getFirestore } from 'firebase/firestore/lite'
41import { getStorage } from 'firebase/storage'
42
43const firebaseConfig = {
44  apiKey: 'some-api',
45  authDomain: 'some-auth-domain',
46  projectId: 'some-project-id',
47  storageBucket: 'some-storage-bucket',
48  messagingSenderId: 'some-id',
49  appId: 'some-app-id',
50  measurementId: 'some-measurement-id',
51}
52
53let firebaseApp: FirebaseApp
54
55if (!getApps.length) {
56  firebaseApp = initializeApp(firebaseConfig)
57}
58
59const fireStore = getFirestore(firebaseApp)
60const auth = getAuth(firebaseApp)
61const storage = getStorage(firebaseApp)
62
63export { fireStore, auth, storage }
64
65    type: &quot;firestore-lite&quot;
66    _app: FirebaseAppImpl
67    _automaticDataCollectionEnabled: false
68    _config: {name: &quot;[DEFAULT]&quot;, automaticDataCollectionEnabled: false}
69    _container: ComponentContainer {name: &quot;[DEFAULT]&quot;, providers: Map(15)}
70    _isDeleted: false
71    _name: &quot;[DEFAULT]&quot;
72    _options:
73    apiKey: 'some-api'
74    authDomain: 'some-auth-domain'
75    projectId: 'some-project-id'
76    storageBucket: 'some-storage-bucket'
77    messagingSenderId: 'some-id'
78    appId: 'some-app-id'
79    measurementId: 'some-measurement-id'
80    [[Prototype]]: Object
81    automaticDataCollectionEnabled: (...)
82    config: (...)
83    container: (...)
84    isDeleted: (...)
85    name: (...)
86    options: (...)
87    [[Prototype]]: Object
88    _credentials: Q {auth: AuthInterop}
89    _databaseId: H {projectId: &quot;next-firebase-fireship&quot;, database: &quot;(default)&quot;}
90    _persistenceKey: &quot;(lite)&quot;
91    _settings: ee {host: &quot;firestore.googleapis.com&quot;, ssl: true, credentials: undefined, ignoreUndefinedProperties: false, cacheSizeBytes: 41943040, …}
92    _settingsFrozen: false
93    app: (...)
94    _initialized: (...)
95    _terminated: (...)
96
97import { getFirestore } from 'firebase/firestore/lite'
98import { getFirestore } from 'firebase/firestore'
99

From the documentation,

The onSnapshot method and DocumentChange, SnapshotListenerOptions, SnapshotMetadata, SnapshotOptions and Unsubscribe objects are not included in lite version.


Another reason for this error to show up could be passing invalid first argument to collection() or doc() functions. They both take a Firestore instance as first argument.

1import { onAuthStateChanged, User } from '@firebase/auth'
2import { doc, onSnapshot, Unsubscribe } from 'firebase/firestore'
3import { useEffect, useState } from 'react'
4import { auth, fireStore } from './firebase'
5
6export const useUserData = () =&gt; {
7  const [username, setUsername] = useState&lt;string | null&gt;(null)
8
9  const [currentUser, setCurrentUser] = useState&lt;User | null&gt;(null)
10
11  useEffect(() =&gt; {
12    let unsubscribe: void | Unsubscribe
13
14    onAuthStateChanged(auth, (user) =&gt; {
15      if (user) {
16        setCurrentUser(user)
17        // The Problem is inside this try blog
18        try {
19          // the onsnapshot function is causing the problem
20          console.log('firestore: ', fireStore)
21          unsubscribe = onSnapshot(doc(fireStore, 'users', user.uid), (doc) =&gt; {
22            setUsername(doc.data()?.username)
23          })
24        } catch (e) {
25          console.log(e.message)
26        }
27      } else {
28        setCurrentUser(null)
29        setUsername(null)
30      }
31    })
32
33    return unsubscribe
34  }, [currentUser])
35
36  return { currentUser, username }
37}
38import { FirebaseApp, getApps, initializeApp } from 'firebase/app'
39import { getAuth } from 'firebase/auth'
40import { getFirestore } from 'firebase/firestore/lite'
41import { getStorage } from 'firebase/storage'
42
43const firebaseConfig = {
44  apiKey: 'some-api',
45  authDomain: 'some-auth-domain',
46  projectId: 'some-project-id',
47  storageBucket: 'some-storage-bucket',
48  messagingSenderId: 'some-id',
49  appId: 'some-app-id',
50  measurementId: 'some-measurement-id',
51}
52
53let firebaseApp: FirebaseApp
54
55if (!getApps.length) {
56  firebaseApp = initializeApp(firebaseConfig)
57}
58
59const fireStore = getFirestore(firebaseApp)
60const auth = getAuth(firebaseApp)
61const storage = getStorage(firebaseApp)
62
63export { fireStore, auth, storage }
64
65    type: &quot;firestore-lite&quot;
66    _app: FirebaseAppImpl
67    _automaticDataCollectionEnabled: false
68    _config: {name: &quot;[DEFAULT]&quot;, automaticDataCollectionEnabled: false}
69    _container: ComponentContainer {name: &quot;[DEFAULT]&quot;, providers: Map(15)}
70    _isDeleted: false
71    _name: &quot;[DEFAULT]&quot;
72    _options:
73    apiKey: 'some-api'
74    authDomain: 'some-auth-domain'
75    projectId: 'some-project-id'
76    storageBucket: 'some-storage-bucket'
77    messagingSenderId: 'some-id'
78    appId: 'some-app-id'
79    measurementId: 'some-measurement-id'
80    [[Prototype]]: Object
81    automaticDataCollectionEnabled: (...)
82    config: (...)
83    container: (...)
84    isDeleted: (...)
85    name: (...)
86    options: (...)
87    [[Prototype]]: Object
88    _credentials: Q {auth: AuthInterop}
89    _databaseId: H {projectId: &quot;next-firebase-fireship&quot;, database: &quot;(default)&quot;}
90    _persistenceKey: &quot;(lite)&quot;
91    _settings: ee {host: &quot;firestore.googleapis.com&quot;, ssl: true, credentials: undefined, ignoreUndefinedProperties: false, cacheSizeBytes: 41943040, …}
92    _settingsFrozen: false
93    app: (...)
94    _initialized: (...)
95    _terminated: (...)
96
97import { getFirestore } from 'firebase/firestore/lite'
98import { getFirestore } from 'firebase/firestore'
99// Ensure that &quot;db&quot; is defined and initialized
100const db = getFirestore();
101// console.log(db);
102
103const colRef = collection(db, &quot;collection_name&quot;);
104

Source https://stackoverflow.com/questions/69047904

QUESTION

Mandatory Consent for Admob User Messaging Platform

Asked 2021-Dec-12 at 16:09

I switched from the deprecated GDPR Consent Library to the new User Messaging Platform, and used the code as stated in the documentation.

I noticed that when the user clicks on Manage Options then Confirm choices, ads will stop displaying altogether (Ad failed to load, no ad config), and I can't find anyway to check if the user didn't consent to the use of personal data.

This is problematic as my app relies purely on ads, and I will be losing money if ads don't show up, so I want to make it mandatory for users to consent to the use of their personal data, otherwise the app should be unusable.

I have made a test project on Github so everyone can test this behavior. If you are not using an emulator, then you need to change the "TEST_DEVICE_ID" to yours.

How can I achieve this?

ANSWER

Answered 2021-Nov-02 at 17:50

I found a workaround for this, but this is no final official solution.

It seems that if a user consented to Personalized ads, a string in SharedPreferences, which key is IABTCF_VendorConsents, will contain ones and zeros corresponding to some vendors (I think). If he didn't consent, this string will be equal to 0.

1private val sp = PreferenceManager.getDefaultSharedPreferences(appContext)
2fun consentedToPersonalizedAds() = sp.getString(&quot;IABTCF_VendorConsents&quot;, null) != &quot;0&quot;
3

Source https://stackoverflow.com/questions/69307205

QUESTION

MissingPluginException(No implementation found for method Messaging#requestPermission on channel firebase_messaging

Asked 2021-Dec-07 at 05:13
1final NotificationSettings settings = await messaging.requestPermission();
2

I am getting this error when calling requestPermission() method of firebase messaging.

[ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: MissingPluginException(No implementation found for method Messaging#requestPermission on channel plugins.flutter.io/firebase_messaging) E/flutter ( 7180): #0 convertPlatformException (package:firebase_messaging_platform_interface/src/method_channel/utils/exception.dart:13:5) E/flutter ( 7180): #1 MethodChannelFirebaseMessaging.requestPermission (package:firebase_messaging_platform_interface/src/method_channel/method_channel_messaging.dart:286:13) E/flutter ( 7180):

In build.gradle i implemented 'com.google.firebase:firebase-messaging'

implementation platform('com.google.firebase:firebase-bom:28.3.0')

ANSWER

Answered 2021-Nov-08 at 09:11

Terminate the current running session.

Do flutter pub get in your terminal

Then run again.

Source https://stackoverflow.com/questions/69880191

QUESTION

Error in retrieving notification_key for group messaging in FCM

Asked 2021-Aug-22 at 06:09

I was able to create a notification_key from notification_key_name as mentioned in the docs.

However, when I went to retrieving the notification_key from notification_key_name using

enter image description here

I get the error:

Your client has issued a malformed or illegal request.

What am I doing wrong?

ANSWER

Answered 2021-Aug-22 at 06:09

It was a silly mistake (thanks to docs as always), the request body should NOT be {} but empty.

enter image description here

Source https://stackoverflow.com/questions/68843537

QUESTION

Firestore Push Notification &quot;time out&quot; error Notification doesn't always get sent

Asked 2021-Jul-13 at 09:43

I am calling a function from my app that sends a notification out to a specific user on the app. The notification gets sent successfully much of the time but a good amount of times it does not get sent. When it does not get sent I check the logs to see

Function execution took 60003 ms, finished with status: 'timeout'

I have tried playing with my promises / async await but have had no luck as I suspect that is where the issue lies.

Here is what my cloud code looks like now

1exports.sendNotification = functions.https.onRequest(async (request, response) =&gt; {
2
3    if (request.method !== &quot;POST&quot;) {
4        response.status(400).send(&quot;Send it using post request&quot;);
5        return;
6    }
7
8    var toUid = request.body.toUid
9    var fcm = request.body.fcm
10    var fromUid = request.body.fromUid
11    var type = request.body.type
12    var fromName = request.body.fromName
13    var messageText = request.body.message
14
15    if (toUid === &quot;&quot; || fromUid === &quot;&quot; || fcm === &quot;&quot;) {
16        response.status(400).send(&quot;Parameter is missing!&quot;);
17        return;
18    }
19
20    // common data for both platforms
21    const notification = {
22     title: fromName,
23     body: messageText,
24    }
25    const fcmToken = fcm
26
27    // ios specific headers
28    const apns = {
29      headers: {
30        &quot;apns-collapse-id&quot;: 'toUid'
31      },
32      payload: {
33        aps: {
34          sound: 'default'
35        },
36        &quot;data&quot;: {
37          &quot;fromUid&quot;: fromUid,
38          &quot;type&quot;: type
39        }
40      }
41    }
42
43    // final message
44    const message = {
45     token: fcmToken,
46     notification: notification,
47     apns: apns,
48    }
49
50    // send message
51    try {
52      return await admin.messaging().send(message);
53      response.status(200).send(&quot;Done&quot;);
54    } catch(e) {
55      console.log('Error sending message:', e);
56    }
57});
58

I call the function from the app as follows

1exports.sendNotification = functions.https.onRequest(async (request, response) =&gt; {
2
3    if (request.method !== &quot;POST&quot;) {
4        response.status(400).send(&quot;Send it using post request&quot;);
5        return;
6    }
7
8    var toUid = request.body.toUid
9    var fcm = request.body.fcm
10    var fromUid = request.body.fromUid
11    var type = request.body.type
12    var fromName = request.body.fromName
13    var messageText = request.body.message
14
15    if (toUid === &quot;&quot; || fromUid === &quot;&quot; || fcm === &quot;&quot;) {
16        response.status(400).send(&quot;Parameter is missing!&quot;);
17        return;
18    }
19
20    // common data for both platforms
21    const notification = {
22     title: fromName,
23     body: messageText,
24    }
25    const fcmToken = fcm
26
27    // ios specific headers
28    const apns = {
29      headers: {
30        &quot;apns-collapse-id&quot;: 'toUid'
31      },
32      payload: {
33        aps: {
34          sound: 'default'
35        },
36        &quot;data&quot;: {
37          &quot;fromUid&quot;: fromUid,
38          &quot;type&quot;: type
39        }
40      }
41    }
42
43    // final message
44    const message = {
45     token: fcmToken,
46     notification: notification,
47     apns: apns,
48    }
49
50    // send message
51    try {
52      return await admin.messaging().send(message);
53      response.status(200).send(&quot;Done&quot;);
54    } catch(e) {
55      console.log('Error sending message:', e);
56    }
57});
58         AF.request(&quot;https://myproject.net/sendNotification&quot;, method: .post, parameters: parameters, encoding: JSONEncoding.default)
59         .responseString { response in
60             print(response)
61            DispatchQueue.main.async {
62                completion(&quot;done&quot;)
63            }
64         }
65

I have seen other stackoverflow questions of similar questions where it was suggested to use .post and JSONEncoding.default and so that is what I have now.

ANSWER

Answered 2021-Jul-06 at 17:40

I'm no node expert by any means, but played with Firebase Messaging for a while and came up with a working async solution to send a notification based on data creation in the realtime db. The only other difference aside from the trigger I really see is I'm not sending the APNS specific header yet...

I'm also remembering now I was having an intermittent timeout issue when I tried using the async messaging.send which is why I'm using promises there.

1exports.sendNotification = functions.https.onRequest(async (request, response) =&gt; {
2
3    if (request.method !== &quot;POST&quot;) {
4        response.status(400).send(&quot;Send it using post request&quot;);
5        return;
6    }
7
8    var toUid = request.body.toUid
9    var fcm = request.body.fcm
10    var fromUid = request.body.fromUid
11    var type = request.body.type
12    var fromName = request.body.fromName
13    var messageText = request.body.message
14
15    if (toUid === &quot;&quot; || fromUid === &quot;&quot; || fcm === &quot;&quot;) {
16        response.status(400).send(&quot;Parameter is missing!&quot;);
17        return;
18    }
19
20    // common data for both platforms
21    const notification = {
22     title: fromName,
23     body: messageText,
24    }
25    const fcmToken = fcm
26
27    // ios specific headers
28    const apns = {
29      headers: {
30        &quot;apns-collapse-id&quot;: 'toUid'
31      },
32      payload: {
33        aps: {
34          sound: 'default'
35        },
36        &quot;data&quot;: {
37          &quot;fromUid&quot;: fromUid,
38          &quot;type&quot;: type
39        }
40      }
41    }
42
43    // final message
44    const message = {
45     token: fcmToken,
46     notification: notification,
47     apns: apns,
48    }
49
50    // send message
51    try {
52      return await admin.messaging().send(message);
53      response.status(200).send(&quot;Done&quot;);
54    } catch(e) {
55      console.log('Error sending message:', e);
56    }
57});
58         AF.request(&quot;https://myproject.net/sendNotification&quot;, method: .post, parameters: parameters, encoding: JSONEncoding.default)
59         .responseString { response in
60             print(response)
61            DispatchQueue.main.async {
62                completion(&quot;done&quot;)
63            }
64         }
65exports.onMessageCreate = functions.database
66.ref('/users/{userId}/notifications/unread/{notificationId}')
67.onCreate(async (snapshot, context) =&gt; {
68    
69    const message = snapshot.val()
70    const category = message.category
71    const title = category + &quot;: &quot; + message.title
72    const text = message.text
73    const forUserId = message.forUserId
74    const date = message.date
75    
76    const token = await getUserToken(forUserId)
77    
78    if (token == null) {
79        throw new functions.https.HttpsError('unavailable', 'The token is nil, unable to send message')
80    }
81    
82    const notification = {
83        notification: {
84            title: title,
85            body: text
86        },
87        data: {
88            category: category,
89            title: message.title,
90            text: text,         
91            forUserId: forUserId,
92            date: date.toString()
93        },
94        token: token
95    }
96    
97    return admin.messaging().send(notification)
98    .then((response) =&gt; {
99        console.log('Successfully sent notification:', response)
100    })
101    .catch((error) =&gt; {
102        console.log('Error sending notification:', error)
103    })
104    
105})
106

Source https://stackoverflow.com/questions/68199189

QUESTION

Google AdMob new SDK setup for iOS : SKAdNetworkItems, NSUserTrackingUsageDescription, ATTrackingManager. Guideline 5.1.2 - Legal - Privacy - Data Use

Asked 2021-May-25 at 17:38

Google AdMob now shows below warning.

enter image description here

Prepare your apps for iOS 14 Apple announced the new AppTrackingTransparency framework, which requires changes to your iOS apps. Implement the GMA SDK 7.64.0 (or later) and set up consent messaging to help prevent a significant loss in ad revenue.

Some apps haven't been configured to use Apple's SKAdNetwork To ensure you're getting credit for all ads activity, like app installs, be sure to configure SKAdNetwork with Google's network IDs.

Some of your iOS apps require a GMA SDK update To keep ads serving normally and minimize a loss in ad revenue, implement the GMA SDK 7.64.0 (or later) for your iOS apps. And configure the SKAdNetwork in your apps with Google's network ID.

For this I did these changes

  1. Updated GoogleMobileAds SDK to 8.0

2.Updated app's Info.plist file with these 3 keys:

1        1. GADApplicationIdentifier key with a string value of AdMob app ID.
2        2. Added SKAdNetworkItems in plist as mentioned here https://developers.google.com/admob/ios/ios14
3        3. NSUserTrackingUsageDescription key with value 'Game_Name would like to access IDFA for thirdparty advertising purpose'  
4

info.plist screenshot enter image description here

Also added App Tracking Transparancy Alert:

1        1. GADApplicationIdentifier key with a string value of AdMob app ID.
2        2. Added SKAdNetworkItems in plist as mentioned here https://developers.google.com/admob/ios/ios14
3        3. NSUserTrackingUsageDescription key with value 'Game_Name would like to access IDFA for thirdparty advertising purpose'  
4- (void)requestIDFA
5{
6    if (@available(iOS 14.0, *))
7    {
8        [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
9            
10            // Admob Ads
11            [self loadAdmob_Ads];
12            [self loadRewardedInterstitial];
13            [self requestAppOpenAd];
14        }];
15    }
16    else
17    {
18        // Admob Ads
19        [self loadAdmob_Ads];
20        [self loadRewardedInterstitial];
21        [self requestAppOpenAd];
22    }
23}
24

Is there anything else I need to do in Xcode ?

See below image from Appstoreconnect, Am I need to set Yes Or No?(Yes, we use advertising data for tracking purpose?) we are not tracking user, not sure about Google AdMob. enter image description here

Data Used to Track You ( Identifiers), Data Linked to You ( Identifiers ). Is it right settings for Google AdMob ? enter image description here

Recent AppStore Rejection Message:

Guideline 5.1.2 - Legal - Privacy - Data Use and Sharing

We noticed you do not use App Tracking Transparency to request the user's permission before tracking their activity across apps and websites. The app privacy information you provided in App Store Connect indicates you collect data in order to track the user, including Device ID and Advertising Data.

Starting with iOS 14.5, apps on the App Store need to receive the user’s permission through the AppTrackingTransparency framework before collecting data used to track them. This requirement protects the privacy of App Store users.

Updates: Game approved by Apple. Here is game with latest admob ads (GADInterstitialAd, GADAppOpenAd, GADRewardedInterstitialAd, GADRewardedAd): https://apps.apple.com/us/app/ocean-fishing-master-3d-games/id1550945081

ANSWER

Answered 2021-May-25 at 17:37

Updates: Game approved by Apple. Here is game with latest admob ads (GADInterstitialAd, GADRewardedInterstitialAd, GADRewardedAd, GADAppOpenAd):

https://apps.apple.com/us/app/ocean-fishing-master-3d-games/id1550945081

Added Google Admob SKAdNetworkIdentifier values in Info.plist

1        1. GADApplicationIdentifier key with a string value of AdMob app ID.
2        2. Added SKAdNetworkItems in plist as mentioned here https://developers.google.com/admob/ios/ios14
3        3. NSUserTrackingUsageDescription key with value 'Game_Name would like to access IDFA for thirdparty advertising purpose'  
4- (void)requestIDFA
5{
6    if (@available(iOS 14.0, *))
7    {
8        [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
9            
10            // Admob Ads
11            [self loadAdmob_Ads];
12            [self loadRewardedInterstitial];
13            [self requestAppOpenAd];
14        }];
15    }
16    else
17    {
18        // Admob Ads
19        [self loadAdmob_Ads];
20        [self loadRewardedInterstitial];
21        [self requestAppOpenAd];
22    }
23}
24&lt;key&gt;SKAdNetworkItems&lt;/key&gt;
25  &lt;array&gt;
26    &lt;dict&gt;
27      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
28      &lt;string&gt;cstr6suwn9.skadnetwork&lt;/string&gt;
29    &lt;/dict&gt;
30    &lt;dict&gt;
31      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
32      &lt;string&gt;4fzdc2evr5.skadnetwork&lt;/string&gt;
33    &lt;/dict&gt;
34    &lt;dict&gt;
35      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
36      &lt;string&gt;2fnua5tdw4.skadnetwork&lt;/string&gt;
37    &lt;/dict&gt;
38    &lt;dict&gt;
39      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
40      &lt;string&gt;ydx93a7ass.skadnetwork&lt;/string&gt;
41    &lt;/dict&gt;
42    &lt;dict&gt;
43      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
44      &lt;string&gt;5a6flpkh64.skadnetwork&lt;/string&gt;
45    &lt;/dict&gt;
46    &lt;dict&gt;
47      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
48      &lt;string&gt;p78axxw29g.skadnetwork&lt;/string&gt;
49    &lt;/dict&gt;
50    &lt;dict&gt;
51      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
52      &lt;string&gt;v72qych5uu.skadnetwork&lt;/string&gt;
53    &lt;/dict&gt;
54    &lt;dict&gt;
55      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
56      &lt;string&gt;c6k4g5qg8m.skadnetwork&lt;/string&gt;
57    &lt;/dict&gt;
58    &lt;dict&gt;
59      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
60      &lt;string&gt;s39g8k73mm.skadnetwork&lt;/string&gt;
61    &lt;/dict&gt;
62    &lt;dict&gt;
63      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
64      &lt;string&gt;3qy4746246.skadnetwork&lt;/string&gt;
65    &lt;/dict&gt;
66    &lt;dict&gt;
67      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
68      &lt;string&gt;3sh42y64q3.skadnetwork&lt;/string&gt;
69    &lt;/dict&gt;
70    &lt;dict&gt;
71      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
72      &lt;string&gt;f38h382jlk.skadnetwork&lt;/string&gt;
73    &lt;/dict&gt;
74    &lt;dict&gt;
75      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
76      &lt;string&gt;hs6bdukanm.skadnetwork&lt;/string&gt;
77    &lt;/dict&gt;
78    &lt;dict&gt;
79      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
80      &lt;string&gt;prcb7njmu6.skadnetwork&lt;/string&gt;
81    &lt;/dict&gt;
82    &lt;dict&gt;
83      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
84      &lt;string&gt;wzmmz9fp6w.skadnetwork&lt;/string&gt;
85    &lt;/dict&gt;
86    &lt;dict&gt;
87      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
88      &lt;string&gt;yclnxrl5pm.skadnetwork&lt;/string&gt;
89    &lt;/dict&gt;
90    &lt;dict&gt;
91      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
92      &lt;string&gt;4468km3ulz.skadnetwork&lt;/string&gt;
93    &lt;/dict&gt;
94    &lt;dict&gt;
95      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
96      &lt;string&gt;t38b2kh725.skadnetwork&lt;/string&gt;
97    &lt;/dict&gt;
98    &lt;dict&gt;
99      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
100      &lt;string&gt;7ug5zh24hu.skadnetwork&lt;/string&gt;
101    &lt;/dict&gt;
102    &lt;dict&gt;
103      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
104      &lt;string&gt;9rd848q2bz.skadnetwork&lt;/string&gt;
105    &lt;/dict&gt;
106    &lt;dict&gt;
107      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
108      &lt;string&gt;n6fk4nfna4.skadnetwork&lt;/string&gt;
109    &lt;/dict&gt;
110    &lt;dict&gt;
111      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
112      &lt;string&gt;kbd757ywx3.skadnetwork&lt;/string&gt;
113    &lt;/dict&gt;
114    &lt;dict&gt;
115      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
116      &lt;string&gt;9t245vhmpl.skadnetwork&lt;/string&gt;
117    &lt;/dict&gt;
118    &lt;dict&gt;
119      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
120      &lt;string&gt;2u9pt9hc89.skadnetwork&lt;/string&gt;
121    &lt;/dict&gt;
122    &lt;dict&gt;
123      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
124      &lt;string&gt;8s468mfl3y.skadnetwork&lt;/string&gt;
125    &lt;/dict&gt;
126    &lt;dict&gt;
127      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
128      &lt;string&gt;av6w8kgt66.skadnetwork&lt;/string&gt;
129    &lt;/dict&gt;
130    &lt;dict&gt;
131      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
132      &lt;string&gt;klf5c3l5u5.skadnetwork&lt;/string&gt;
133    &lt;/dict&gt;
134    &lt;dict&gt;
135      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
136      &lt;string&gt;ppxm28t8ap.skadnetwork&lt;/string&gt;
137    &lt;/dict&gt;
138    &lt;dict&gt;
139      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
140      &lt;string&gt;424m5254lk.skadnetwork&lt;/string&gt;
141    &lt;/dict&gt;
142    &lt;dict&gt;
143      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
144      &lt;string&gt;uw77j35x4d.skadnetwork&lt;/string&gt;
145    &lt;/dict&gt;
146    &lt;dict&gt;
147      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
148      &lt;string&gt;e5fvkxwrpn.skadnetwork&lt;/string&gt;
149    &lt;/dict&gt;
150    &lt;dict&gt;
151      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
152      &lt;string&gt;zq492l623r.skadnetwork&lt;/string&gt;
153    &lt;/dict&gt;
154    &lt;dict&gt;
155      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
156      &lt;string&gt;3qcr597p9d.skadnetwork&lt;/string&gt;
157    &lt;/dict&gt;
158  &lt;/array&gt;
159

Added requestIDFA in didFinishLaunchingWithOptions. It opens App Tracking Transparency dialog box.

1        1. GADApplicationIdentifier key with a string value of AdMob app ID.
2        2. Added SKAdNetworkItems in plist as mentioned here https://developers.google.com/admob/ios/ios14
3        3. NSUserTrackingUsageDescription key with value 'Game_Name would like to access IDFA for thirdparty advertising purpose'  
4- (void)requestIDFA
5{
6    if (@available(iOS 14.0, *))
7    {
8        [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
9            
10            // Admob Ads
11            [self loadAdmob_Ads];
12            [self loadRewardedInterstitial];
13            [self requestAppOpenAd];
14        }];
15    }
16    else
17    {
18        // Admob Ads
19        [self loadAdmob_Ads];
20        [self loadRewardedInterstitial];
21        [self requestAppOpenAd];
22    }
23}
24&lt;key&gt;SKAdNetworkItems&lt;/key&gt;
25  &lt;array&gt;
26    &lt;dict&gt;
27      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
28      &lt;string&gt;cstr6suwn9.skadnetwork&lt;/string&gt;
29    &lt;/dict&gt;
30    &lt;dict&gt;
31      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
32      &lt;string&gt;4fzdc2evr5.skadnetwork&lt;/string&gt;
33    &lt;/dict&gt;
34    &lt;dict&gt;
35      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
36      &lt;string&gt;2fnua5tdw4.skadnetwork&lt;/string&gt;
37    &lt;/dict&gt;
38    &lt;dict&gt;
39      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
40      &lt;string&gt;ydx93a7ass.skadnetwork&lt;/string&gt;
41    &lt;/dict&gt;
42    &lt;dict&gt;
43      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
44      &lt;string&gt;5a6flpkh64.skadnetwork&lt;/string&gt;
45    &lt;/dict&gt;
46    &lt;dict&gt;
47      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
48      &lt;string&gt;p78axxw29g.skadnetwork&lt;/string&gt;
49    &lt;/dict&gt;
50    &lt;dict&gt;
51      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
52      &lt;string&gt;v72qych5uu.skadnetwork&lt;/string&gt;
53    &lt;/dict&gt;
54    &lt;dict&gt;
55      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
56      &lt;string&gt;c6k4g5qg8m.skadnetwork&lt;/string&gt;
57    &lt;/dict&gt;
58    &lt;dict&gt;
59      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
60      &lt;string&gt;s39g8k73mm.skadnetwork&lt;/string&gt;
61    &lt;/dict&gt;
62    &lt;dict&gt;
63      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
64      &lt;string&gt;3qy4746246.skadnetwork&lt;/string&gt;
65    &lt;/dict&gt;
66    &lt;dict&gt;
67      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
68      &lt;string&gt;3sh42y64q3.skadnetwork&lt;/string&gt;
69    &lt;/dict&gt;
70    &lt;dict&gt;
71      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
72      &lt;string&gt;f38h382jlk.skadnetwork&lt;/string&gt;
73    &lt;/dict&gt;
74    &lt;dict&gt;
75      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
76      &lt;string&gt;hs6bdukanm.skadnetwork&lt;/string&gt;
77    &lt;/dict&gt;
78    &lt;dict&gt;
79      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
80      &lt;string&gt;prcb7njmu6.skadnetwork&lt;/string&gt;
81    &lt;/dict&gt;
82    &lt;dict&gt;
83      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
84      &lt;string&gt;wzmmz9fp6w.skadnetwork&lt;/string&gt;
85    &lt;/dict&gt;
86    &lt;dict&gt;
87      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
88      &lt;string&gt;yclnxrl5pm.skadnetwork&lt;/string&gt;
89    &lt;/dict&gt;
90    &lt;dict&gt;
91      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
92      &lt;string&gt;4468km3ulz.skadnetwork&lt;/string&gt;
93    &lt;/dict&gt;
94    &lt;dict&gt;
95      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
96      &lt;string&gt;t38b2kh725.skadnetwork&lt;/string&gt;
97    &lt;/dict&gt;
98    &lt;dict&gt;
99      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
100      &lt;string&gt;7ug5zh24hu.skadnetwork&lt;/string&gt;
101    &lt;/dict&gt;
102    &lt;dict&gt;
103      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
104      &lt;string&gt;9rd848q2bz.skadnetwork&lt;/string&gt;
105    &lt;/dict&gt;
106    &lt;dict&gt;
107      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
108      &lt;string&gt;n6fk4nfna4.skadnetwork&lt;/string&gt;
109    &lt;/dict&gt;
110    &lt;dict&gt;
111      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
112      &lt;string&gt;kbd757ywx3.skadnetwork&lt;/string&gt;
113    &lt;/dict&gt;
114    &lt;dict&gt;
115      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
116      &lt;string&gt;9t245vhmpl.skadnetwork&lt;/string&gt;
117    &lt;/dict&gt;
118    &lt;dict&gt;
119      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
120      &lt;string&gt;2u9pt9hc89.skadnetwork&lt;/string&gt;
121    &lt;/dict&gt;
122    &lt;dict&gt;
123      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
124      &lt;string&gt;8s468mfl3y.skadnetwork&lt;/string&gt;
125    &lt;/dict&gt;
126    &lt;dict&gt;
127      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
128      &lt;string&gt;av6w8kgt66.skadnetwork&lt;/string&gt;
129    &lt;/dict&gt;
130    &lt;dict&gt;
131      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
132      &lt;string&gt;klf5c3l5u5.skadnetwork&lt;/string&gt;
133    &lt;/dict&gt;
134    &lt;dict&gt;
135      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
136      &lt;string&gt;ppxm28t8ap.skadnetwork&lt;/string&gt;
137    &lt;/dict&gt;
138    &lt;dict&gt;
139      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
140      &lt;string&gt;424m5254lk.skadnetwork&lt;/string&gt;
141    &lt;/dict&gt;
142    &lt;dict&gt;
143      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
144      &lt;string&gt;uw77j35x4d.skadnetwork&lt;/string&gt;
145    &lt;/dict&gt;
146    &lt;dict&gt;
147      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
148      &lt;string&gt;e5fvkxwrpn.skadnetwork&lt;/string&gt;
149    &lt;/dict&gt;
150    &lt;dict&gt;
151      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
152      &lt;string&gt;zq492l623r.skadnetwork&lt;/string&gt;
153    &lt;/dict&gt;
154    &lt;dict&gt;
155      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
156      &lt;string&gt;3qcr597p9d.skadnetwork&lt;/string&gt;
157    &lt;/dict&gt;
158  &lt;/array&gt;
159- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
160    
161    [[GADMobileAds sharedInstance] startWithCompletionHandler:nil];
162    [self requestIDFA];
163.
164.
165.
166}
167

requestIDFA function:

1        1. GADApplicationIdentifier key with a string value of AdMob app ID.
2        2. Added SKAdNetworkItems in plist as mentioned here https://developers.google.com/admob/ios/ios14
3        3. NSUserTrackingUsageDescription key with value 'Game_Name would like to access IDFA for thirdparty advertising purpose'  
4- (void)requestIDFA
5{
6    if (@available(iOS 14.0, *))
7    {
8        [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
9            
10            // Admob Ads
11            [self loadAdmob_Ads];
12            [self loadRewardedInterstitial];
13            [self requestAppOpenAd];
14        }];
15    }
16    else
17    {
18        // Admob Ads
19        [self loadAdmob_Ads];
20        [self loadRewardedInterstitial];
21        [self requestAppOpenAd];
22    }
23}
24&lt;key&gt;SKAdNetworkItems&lt;/key&gt;
25  &lt;array&gt;
26    &lt;dict&gt;
27      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
28      &lt;string&gt;cstr6suwn9.skadnetwork&lt;/string&gt;
29    &lt;/dict&gt;
30    &lt;dict&gt;
31      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
32      &lt;string&gt;4fzdc2evr5.skadnetwork&lt;/string&gt;
33    &lt;/dict&gt;
34    &lt;dict&gt;
35      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
36      &lt;string&gt;2fnua5tdw4.skadnetwork&lt;/string&gt;
37    &lt;/dict&gt;
38    &lt;dict&gt;
39      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
40      &lt;string&gt;ydx93a7ass.skadnetwork&lt;/string&gt;
41    &lt;/dict&gt;
42    &lt;dict&gt;
43      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
44      &lt;string&gt;5a6flpkh64.skadnetwork&lt;/string&gt;
45    &lt;/dict&gt;
46    &lt;dict&gt;
47      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
48      &lt;string&gt;p78axxw29g.skadnetwork&lt;/string&gt;
49    &lt;/dict&gt;
50    &lt;dict&gt;
51      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
52      &lt;string&gt;v72qych5uu.skadnetwork&lt;/string&gt;
53    &lt;/dict&gt;
54    &lt;dict&gt;
55      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
56      &lt;string&gt;c6k4g5qg8m.skadnetwork&lt;/string&gt;
57    &lt;/dict&gt;
58    &lt;dict&gt;
59      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
60      &lt;string&gt;s39g8k73mm.skadnetwork&lt;/string&gt;
61    &lt;/dict&gt;
62    &lt;dict&gt;
63      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
64      &lt;string&gt;3qy4746246.skadnetwork&lt;/string&gt;
65    &lt;/dict&gt;
66    &lt;dict&gt;
67      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
68      &lt;string&gt;3sh42y64q3.skadnetwork&lt;/string&gt;
69    &lt;/dict&gt;
70    &lt;dict&gt;
71      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
72      &lt;string&gt;f38h382jlk.skadnetwork&lt;/string&gt;
73    &lt;/dict&gt;
74    &lt;dict&gt;
75      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
76      &lt;string&gt;hs6bdukanm.skadnetwork&lt;/string&gt;
77    &lt;/dict&gt;
78    &lt;dict&gt;
79      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
80      &lt;string&gt;prcb7njmu6.skadnetwork&lt;/string&gt;
81    &lt;/dict&gt;
82    &lt;dict&gt;
83      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
84      &lt;string&gt;wzmmz9fp6w.skadnetwork&lt;/string&gt;
85    &lt;/dict&gt;
86    &lt;dict&gt;
87      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
88      &lt;string&gt;yclnxrl5pm.skadnetwork&lt;/string&gt;
89    &lt;/dict&gt;
90    &lt;dict&gt;
91      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
92      &lt;string&gt;4468km3ulz.skadnetwork&lt;/string&gt;
93    &lt;/dict&gt;
94    &lt;dict&gt;
95      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
96      &lt;string&gt;t38b2kh725.skadnetwork&lt;/string&gt;
97    &lt;/dict&gt;
98    &lt;dict&gt;
99      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
100      &lt;string&gt;7ug5zh24hu.skadnetwork&lt;/string&gt;
101    &lt;/dict&gt;
102    &lt;dict&gt;
103      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
104      &lt;string&gt;9rd848q2bz.skadnetwork&lt;/string&gt;
105    &lt;/dict&gt;
106    &lt;dict&gt;
107      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
108      &lt;string&gt;n6fk4nfna4.skadnetwork&lt;/string&gt;
109    &lt;/dict&gt;
110    &lt;dict&gt;
111      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
112      &lt;string&gt;kbd757ywx3.skadnetwork&lt;/string&gt;
113    &lt;/dict&gt;
114    &lt;dict&gt;
115      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
116      &lt;string&gt;9t245vhmpl.skadnetwork&lt;/string&gt;
117    &lt;/dict&gt;
118    &lt;dict&gt;
119      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
120      &lt;string&gt;2u9pt9hc89.skadnetwork&lt;/string&gt;
121    &lt;/dict&gt;
122    &lt;dict&gt;
123      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
124      &lt;string&gt;8s468mfl3y.skadnetwork&lt;/string&gt;
125    &lt;/dict&gt;
126    &lt;dict&gt;
127      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
128      &lt;string&gt;av6w8kgt66.skadnetwork&lt;/string&gt;
129    &lt;/dict&gt;
130    &lt;dict&gt;
131      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
132      &lt;string&gt;klf5c3l5u5.skadnetwork&lt;/string&gt;
133    &lt;/dict&gt;
134    &lt;dict&gt;
135      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
136      &lt;string&gt;ppxm28t8ap.skadnetwork&lt;/string&gt;
137    &lt;/dict&gt;
138    &lt;dict&gt;
139      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
140      &lt;string&gt;424m5254lk.skadnetwork&lt;/string&gt;
141    &lt;/dict&gt;
142    &lt;dict&gt;
143      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
144      &lt;string&gt;uw77j35x4d.skadnetwork&lt;/string&gt;
145    &lt;/dict&gt;
146    &lt;dict&gt;
147      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
148      &lt;string&gt;e5fvkxwrpn.skadnetwork&lt;/string&gt;
149    &lt;/dict&gt;
150    &lt;dict&gt;
151      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
152      &lt;string&gt;zq492l623r.skadnetwork&lt;/string&gt;
153    &lt;/dict&gt;
154    &lt;dict&gt;
155      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
156      &lt;string&gt;3qcr597p9d.skadnetwork&lt;/string&gt;
157    &lt;/dict&gt;
158  &lt;/array&gt;
159- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
160    
161    [[GADMobileAds sharedInstance] startWithCompletionHandler:nil];
162    [self requestIDFA];
163.
164.
165.
166}
167- (void)requestIDFA
168{
169    if (@available(iOS 14.0, *))
170    {
171        [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
172
173            // Admob Ads
174            [self requestAppOpenAd];
175            [self loadAdmob_Ads];
176            [self loadRewardedInterstitial];
177        }];
178    }
179    else
180    {
181        // Admob Ads
182        [self requestAppOpenAd];
183        [self loadAdmob_Ads];
184        [self loadRewardedInterstitial];
185    }
186}
187

Added AppTrackingTransparency.framework to Xcode.

In info.plist added NSUserTrackingUsageDescription

1        1. GADApplicationIdentifier key with a string value of AdMob app ID.
2        2. Added SKAdNetworkItems in plist as mentioned here https://developers.google.com/admob/ios/ios14
3        3. NSUserTrackingUsageDescription key with value 'Game_Name would like to access IDFA for thirdparty advertising purpose'  
4- (void)requestIDFA
5{
6    if (@available(iOS 14.0, *))
7    {
8        [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
9            
10            // Admob Ads
11            [self loadAdmob_Ads];
12            [self loadRewardedInterstitial];
13            [self requestAppOpenAd];
14        }];
15    }
16    else
17    {
18        // Admob Ads
19        [self loadAdmob_Ads];
20        [self loadRewardedInterstitial];
21        [self requestAppOpenAd];
22    }
23}
24&lt;key&gt;SKAdNetworkItems&lt;/key&gt;
25  &lt;array&gt;
26    &lt;dict&gt;
27      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
28      &lt;string&gt;cstr6suwn9.skadnetwork&lt;/string&gt;
29    &lt;/dict&gt;
30    &lt;dict&gt;
31      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
32      &lt;string&gt;4fzdc2evr5.skadnetwork&lt;/string&gt;
33    &lt;/dict&gt;
34    &lt;dict&gt;
35      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
36      &lt;string&gt;2fnua5tdw4.skadnetwork&lt;/string&gt;
37    &lt;/dict&gt;
38    &lt;dict&gt;
39      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
40      &lt;string&gt;ydx93a7ass.skadnetwork&lt;/string&gt;
41    &lt;/dict&gt;
42    &lt;dict&gt;
43      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
44      &lt;string&gt;5a6flpkh64.skadnetwork&lt;/string&gt;
45    &lt;/dict&gt;
46    &lt;dict&gt;
47      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
48      &lt;string&gt;p78axxw29g.skadnetwork&lt;/string&gt;
49    &lt;/dict&gt;
50    &lt;dict&gt;
51      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
52      &lt;string&gt;v72qych5uu.skadnetwork&lt;/string&gt;
53    &lt;/dict&gt;
54    &lt;dict&gt;
55      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
56      &lt;string&gt;c6k4g5qg8m.skadnetwork&lt;/string&gt;
57    &lt;/dict&gt;
58    &lt;dict&gt;
59      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
60      &lt;string&gt;s39g8k73mm.skadnetwork&lt;/string&gt;
61    &lt;/dict&gt;
62    &lt;dict&gt;
63      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
64      &lt;string&gt;3qy4746246.skadnetwork&lt;/string&gt;
65    &lt;/dict&gt;
66    &lt;dict&gt;
67      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
68      &lt;string&gt;3sh42y64q3.skadnetwork&lt;/string&gt;
69    &lt;/dict&gt;
70    &lt;dict&gt;
71      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
72      &lt;string&gt;f38h382jlk.skadnetwork&lt;/string&gt;
73    &lt;/dict&gt;
74    &lt;dict&gt;
75      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
76      &lt;string&gt;hs6bdukanm.skadnetwork&lt;/string&gt;
77    &lt;/dict&gt;
78    &lt;dict&gt;
79      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
80      &lt;string&gt;prcb7njmu6.skadnetwork&lt;/string&gt;
81    &lt;/dict&gt;
82    &lt;dict&gt;
83      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
84      &lt;string&gt;wzmmz9fp6w.skadnetwork&lt;/string&gt;
85    &lt;/dict&gt;
86    &lt;dict&gt;
87      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
88      &lt;string&gt;yclnxrl5pm.skadnetwork&lt;/string&gt;
89    &lt;/dict&gt;
90    &lt;dict&gt;
91      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
92      &lt;string&gt;4468km3ulz.skadnetwork&lt;/string&gt;
93    &lt;/dict&gt;
94    &lt;dict&gt;
95      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
96      &lt;string&gt;t38b2kh725.skadnetwork&lt;/string&gt;
97    &lt;/dict&gt;
98    &lt;dict&gt;
99      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
100      &lt;string&gt;7ug5zh24hu.skadnetwork&lt;/string&gt;
101    &lt;/dict&gt;
102    &lt;dict&gt;
103      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
104      &lt;string&gt;9rd848q2bz.skadnetwork&lt;/string&gt;
105    &lt;/dict&gt;
106    &lt;dict&gt;
107      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
108      &lt;string&gt;n6fk4nfna4.skadnetwork&lt;/string&gt;
109    &lt;/dict&gt;
110    &lt;dict&gt;
111      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
112      &lt;string&gt;kbd757ywx3.skadnetwork&lt;/string&gt;
113    &lt;/dict&gt;
114    &lt;dict&gt;
115      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
116      &lt;string&gt;9t245vhmpl.skadnetwork&lt;/string&gt;
117    &lt;/dict&gt;
118    &lt;dict&gt;
119      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
120      &lt;string&gt;2u9pt9hc89.skadnetwork&lt;/string&gt;
121    &lt;/dict&gt;
122    &lt;dict&gt;
123      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
124      &lt;string&gt;8s468mfl3y.skadnetwork&lt;/string&gt;
125    &lt;/dict&gt;
126    &lt;dict&gt;
127      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
128      &lt;string&gt;av6w8kgt66.skadnetwork&lt;/string&gt;
129    &lt;/dict&gt;
130    &lt;dict&gt;
131      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
132      &lt;string&gt;klf5c3l5u5.skadnetwork&lt;/string&gt;
133    &lt;/dict&gt;
134    &lt;dict&gt;
135      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
136      &lt;string&gt;ppxm28t8ap.skadnetwork&lt;/string&gt;
137    &lt;/dict&gt;
138    &lt;dict&gt;
139      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
140      &lt;string&gt;424m5254lk.skadnetwork&lt;/string&gt;
141    &lt;/dict&gt;
142    &lt;dict&gt;
143      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
144      &lt;string&gt;uw77j35x4d.skadnetwork&lt;/string&gt;
145    &lt;/dict&gt;
146    &lt;dict&gt;
147      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
148      &lt;string&gt;e5fvkxwrpn.skadnetwork&lt;/string&gt;
149    &lt;/dict&gt;
150    &lt;dict&gt;
151      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
152      &lt;string&gt;zq492l623r.skadnetwork&lt;/string&gt;
153    &lt;/dict&gt;
154    &lt;dict&gt;
155      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
156      &lt;string&gt;3qcr597p9d.skadnetwork&lt;/string&gt;
157    &lt;/dict&gt;
158  &lt;/array&gt;
159- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
160    
161    [[GADMobileAds sharedInstance] startWithCompletionHandler:nil];
162    [self requestIDFA];
163.
164.
165.
166}
167- (void)requestIDFA
168{
169    if (@available(iOS 14.0, *))
170    {
171        [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
172
173            // Admob Ads
174            [self requestAppOpenAd];
175            [self loadAdmob_Ads];
176            [self loadRewardedInterstitial];
177        }];
178    }
179    else
180    {
181        // Admob Ads
182        [self requestAppOpenAd];
183        [self loadAdmob_Ads];
184        [self loadRewardedInterstitial];
185    }
186}
187&lt;key&gt;NSUserTrackingUsageDescription&lt;/key&gt;
188&lt;string&gt;This identifier will be used to deliver personalized ads to you.&lt;/string&gt;
189

Admob ads related functions:

1        1. GADApplicationIdentifier key with a string value of AdMob app ID.
2        2. Added SKAdNetworkItems in plist as mentioned here https://developers.google.com/admob/ios/ios14
3        3. NSUserTrackingUsageDescription key with value 'Game_Name would like to access IDFA for thirdparty advertising purpose'  
4- (void)requestIDFA
5{
6    if (@available(iOS 14.0, *))
7    {
8        [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
9            
10            // Admob Ads
11            [self loadAdmob_Ads];
12            [self loadRewardedInterstitial];
13            [self requestAppOpenAd];
14        }];
15    }
16    else
17    {
18        // Admob Ads
19        [self loadAdmob_Ads];
20        [self loadRewardedInterstitial];
21        [self requestAppOpenAd];
22    }
23}
24&lt;key&gt;SKAdNetworkItems&lt;/key&gt;
25  &lt;array&gt;
26    &lt;dict&gt;
27      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
28      &lt;string&gt;cstr6suwn9.skadnetwork&lt;/string&gt;
29    &lt;/dict&gt;
30    &lt;dict&gt;
31      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
32      &lt;string&gt;4fzdc2evr5.skadnetwork&lt;/string&gt;
33    &lt;/dict&gt;
34    &lt;dict&gt;
35      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
36      &lt;string&gt;2fnua5tdw4.skadnetwork&lt;/string&gt;
37    &lt;/dict&gt;
38    &lt;dict&gt;
39      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
40      &lt;string&gt;ydx93a7ass.skadnetwork&lt;/string&gt;
41    &lt;/dict&gt;
42    &lt;dict&gt;
43      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
44      &lt;string&gt;5a6flpkh64.skadnetwork&lt;/string&gt;
45    &lt;/dict&gt;
46    &lt;dict&gt;
47      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
48      &lt;string&gt;p78axxw29g.skadnetwork&lt;/string&gt;
49    &lt;/dict&gt;
50    &lt;dict&gt;
51      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
52      &lt;string&gt;v72qych5uu.skadnetwork&lt;/string&gt;
53    &lt;/dict&gt;
54    &lt;dict&gt;
55      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
56      &lt;string&gt;c6k4g5qg8m.skadnetwork&lt;/string&gt;
57    &lt;/dict&gt;
58    &lt;dict&gt;
59      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
60      &lt;string&gt;s39g8k73mm.skadnetwork&lt;/string&gt;
61    &lt;/dict&gt;
62    &lt;dict&gt;
63      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
64      &lt;string&gt;3qy4746246.skadnetwork&lt;/string&gt;
65    &lt;/dict&gt;
66    &lt;dict&gt;
67      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
68      &lt;string&gt;3sh42y64q3.skadnetwork&lt;/string&gt;
69    &lt;/dict&gt;
70    &lt;dict&gt;
71      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
72      &lt;string&gt;f38h382jlk.skadnetwork&lt;/string&gt;
73    &lt;/dict&gt;
74    &lt;dict&gt;
75      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
76      &lt;string&gt;hs6bdukanm.skadnetwork&lt;/string&gt;
77    &lt;/dict&gt;
78    &lt;dict&gt;
79      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
80      &lt;string&gt;prcb7njmu6.skadnetwork&lt;/string&gt;
81    &lt;/dict&gt;
82    &lt;dict&gt;
83      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
84      &lt;string&gt;wzmmz9fp6w.skadnetwork&lt;/string&gt;
85    &lt;/dict&gt;
86    &lt;dict&gt;
87      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
88      &lt;string&gt;yclnxrl5pm.skadnetwork&lt;/string&gt;
89    &lt;/dict&gt;
90    &lt;dict&gt;
91      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
92      &lt;string&gt;4468km3ulz.skadnetwork&lt;/string&gt;
93    &lt;/dict&gt;
94    &lt;dict&gt;
95      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
96      &lt;string&gt;t38b2kh725.skadnetwork&lt;/string&gt;
97    &lt;/dict&gt;
98    &lt;dict&gt;
99      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
100      &lt;string&gt;7ug5zh24hu.skadnetwork&lt;/string&gt;
101    &lt;/dict&gt;
102    &lt;dict&gt;
103      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
104      &lt;string&gt;9rd848q2bz.skadnetwork&lt;/string&gt;
105    &lt;/dict&gt;
106    &lt;dict&gt;
107      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
108      &lt;string&gt;n6fk4nfna4.skadnetwork&lt;/string&gt;
109    &lt;/dict&gt;
110    &lt;dict&gt;
111      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
112      &lt;string&gt;kbd757ywx3.skadnetwork&lt;/string&gt;
113    &lt;/dict&gt;
114    &lt;dict&gt;
115      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
116      &lt;string&gt;9t245vhmpl.skadnetwork&lt;/string&gt;
117    &lt;/dict&gt;
118    &lt;dict&gt;
119      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
120      &lt;string&gt;2u9pt9hc89.skadnetwork&lt;/string&gt;
121    &lt;/dict&gt;
122    &lt;dict&gt;
123      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
124      &lt;string&gt;8s468mfl3y.skadnetwork&lt;/string&gt;
125    &lt;/dict&gt;
126    &lt;dict&gt;
127      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
128      &lt;string&gt;av6w8kgt66.skadnetwork&lt;/string&gt;
129    &lt;/dict&gt;
130    &lt;dict&gt;
131      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
132      &lt;string&gt;klf5c3l5u5.skadnetwork&lt;/string&gt;
133    &lt;/dict&gt;
134    &lt;dict&gt;
135      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
136      &lt;string&gt;ppxm28t8ap.skadnetwork&lt;/string&gt;
137    &lt;/dict&gt;
138    &lt;dict&gt;
139      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
140      &lt;string&gt;424m5254lk.skadnetwork&lt;/string&gt;
141    &lt;/dict&gt;
142    &lt;dict&gt;
143      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
144      &lt;string&gt;uw77j35x4d.skadnetwork&lt;/string&gt;
145    &lt;/dict&gt;
146    &lt;dict&gt;
147      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
148      &lt;string&gt;e5fvkxwrpn.skadnetwork&lt;/string&gt;
149    &lt;/dict&gt;
150    &lt;dict&gt;
151      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
152      &lt;string&gt;zq492l623r.skadnetwork&lt;/string&gt;
153    &lt;/dict&gt;
154    &lt;dict&gt;
155      &lt;key&gt;SKAdNetworkIdentifier&lt;/key&gt;
156      &lt;string&gt;3qcr597p9d.skadnetwork&lt;/string&gt;
157    &lt;/dict&gt;
158  &lt;/array&gt;
159- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
160    
161    [[GADMobileAds sharedInstance] startWithCompletionHandler:nil];
162    [self requestIDFA];
163.
164.
165.
166}
167- (void)requestIDFA
168{
169    if (@available(iOS 14.0, *))
170    {
171        [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
172
173            // Admob Ads
174            [self requestAppOpenAd];
175            [self loadAdmob_Ads];
176            [self loadRewardedInterstitial];
177        }];
178    }
179    else
180    {
181        // Admob Ads
182        [self requestAppOpenAd];
183        [self loadAdmob_Ads];
184        [self loadRewardedInterstitial];
185    }
186}
187&lt;key&gt;NSUserTrackingUsageDescription&lt;/key&gt;
188&lt;string&gt;This identifier will be used to deliver personalized ads to you.&lt;/string&gt;
189- (void)requestAppOpenAd {
190  self.appOpenAd = nil;
191  [GADAppOpenAd loadWithAdUnitID:ADMOB_APP_OPEN_ID
192                         request:[GADRequest request]
193                     orientation:UIInterfaceOrientationPortrait
194               completionHandler:^(GADAppOpenAd *_Nullable appOpenAd, NSError *_Nullable error) {
195                 if (error) {
196                   NSLog(@&quot;Failed to load app open ad: %@&quot;, error);
197                   return;
198                 }
199                 self.appOpenAd = appOpenAd;
200                 self.appOpenAd.fullScreenContentDelegate = self;
201
202               }];
203}
204
205- (void)tryToPresentAd
206{
207        if (self.appOpenAd) {
208          UIViewController *rootController = self.window.rootViewController;
209          [self.appOpenAd presentFromRootViewController:rootController];
210        } else {
211          // If you don't have an ad ready, request one.
212          [self requestAppOpenAd];
213        }
214}
215
216- (void)applicationDidBecomeActive:(UIApplication *)application {
217 [self tryToPresentAd];
218}
219
220-(void)loadAdmob_Ads
221{
222    GADRequest *request = [GADRequest request];
223            
224    [GADInterstitialAd loadWithAdUnitID:ADMOB_FULL_SCREEM
225                                    request:request
226                          completionHandler:^(GADInterstitialAd *ad, NSError *error)
227    {
228      if (error)
229      {
230                NSLog(@&quot;\nAdmob Failed to load interstitial ad with error: %@&quot;, [error localizedDescription]);
231          return;
232      }
233      self.interstitial = ad;
234      self.interstitial.fullScreenContentDelegate = self;
235    }];
236}
237
238-(void)showAdmobAdsFullScreen
239{
240        if (self.interstitial) {
241            [self.interstitial presentFromRootViewController:self.viewController];
242          }
243}
244
245-(void)loadRewardedInterstitial
246{
247    [GADRewardedInterstitialAd
248           loadWithAdUnitID:ADMOB_REWARDED_INTERSTITIAL
249                    request:[GADRequest request]
250          completionHandler:^(
251              GADRewardedInterstitialAd *_Nullable rewardedInterstitialAd,
252              NSError *_Nullable error) {
253            if (!error) {
254              self.rewardedInterstitialAd = rewardedInterstitialAd;
255              self.rewardedInterstitialAd.fullScreenContentDelegate = self;
256            }
257          }];
258}
259
260-(void)playRewardedInterstitial
261{
262          [self.rewardedInterstitialAd presentFromRootViewController:self.viewController
263                                userDidEarnRewardHandler:^{
264                                    
265                                    [self rewardInterstitialDoneRewardUser];
266      
267                                    [self loadRewardedInterstitial];
268                                }];
269}
270

Source https://stackoverflow.com/questions/66177136

Community Discussions contain sources that include Stack Exchange Network

Tutorials and Learning Resources in Messaging

Tutorials and Learning Resources are not available at this moment for Messaging

Share this Page

share link

Get latest updates on Messaging