Description: I am only using com.google.android.gms packaged classes for AD Id and Remote config and all the code is being run on IO Dispatcher. I feel this is happening internally on Google's side. Still I want your inputs how this can be fixed from my side or whether it can be fixed or not?

Full stack trace:

at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1659) at libcore.io.BlockGuardOs.stat(BlockGuardOs.java:419) at libcore.io.ForwardingOs.stat(ForwardingOs.java:846) at android.app.ActivityThread$AndroidOs.stat(ActivityThread.java:8143) at java.io.UnixFileSystem.getLength(UnixFileSystem.java:330) at java.io.File.length(File.java:968) at auen.a(:com.google.android.gms@233717044@23.37.17 (190400-570218080):25) at aufq.e(:com.google.android.gms@233717044@23.37.17 (190400-570218080):252) at aufq.b(:com.google.android.gms@233717044@23.37.17 (190400-570218080):450) at auft.query(:com.google.android.gms@233717044@23.37.17 (190400-570218080):141) at aevp.query(:com.google.android.gms@233717044@23.37.17 (190400-570218080):3) at android.content.ContentProvider.query(ContentProvider.java:1417) at mgp.superQuery(:com.google.android.gms@233717044@23.37.17 (190400-570218080):2) at com.google.android.chimera.ContentProvider.query(:com.google.android.gms@233717044@23.37.17 (190400-570218080):2) at aevp.query(:com.google.android.gms@233717044@23.37.17 (190400-570218080):20) at android.content.ContentProvider.query(ContentProvider.java:1513) at mgp.superQuery(:com.google.android.gms@233717044@23.37.17 (190400-570218080):1) at com.google.android.chimera.ContentProvider.query(:com.google.android.gms@233717044@23.37.17 (190400-570218080):1) at mgp.query(:com.google.android.gms@233717044@23.37.17 (190400-570218080):2) at android.content.ContentProvider$Transport.query(ContentProvider.java:281) at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:107) at android.os.Binder.execTransactInternal(Binder.java:1226) at android.os.Binder.execTransact(Binder.java:1163) # via Binder call with stack: at android.os.StrictMode.readAndHandleBinderCallViolations(StrictMode.java:2497) at android.os.Parcel.readExceptionCode(Parcel.java:2417) at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:139) at android.content.ContentProviderProxy.query(ContentProviderNative.java:481) at android.content.ContentProviderClient.query(ContentProviderClient.java:196) at android.content.ContentProviderClient.query(ContentProviderClient.java:178) at bau.a(PG:30) at bkd.a(PG:1) at aqp.run(PG:27) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:233) at android.os.Looper.loop(Looper.java:344) at qco.run(PG:4) at qah.run(PG:3) at java.lang.Thread.run(Thread.java:1012) at qdi.run(PG:5) 

We are using Google Ads as a source for new users of our app. We have it linked to Firebase and can see the install (first_open) events in Google Ad words.

We would like to record the Google Ad campaign information against our authenticated Firebase users in our back-end database so we can better track value of campaigns over time.

Is there some way to hook into the Firebase SDK in the Flutter app to listen for/retrieve this information as it is sent to Google Ads when the app is first installed? Or is there another way we can use for source attribution tracking across both iOS and Android installs?

Thanks!

I'm currently using the Google Ads API to fetch historical metrics for specific keywords. By default, the API provides data for the last 12 months. However, I'm interested in retrieving data for a longer period, say 24 months or more. Is there a way to specify a date range or retrieve data for more than 12 months using the Google Ads API? If not, are there any workarounds to achieve this? The sample code is here:https://developers.google.com/google-ads/api/docs/keyword-planning/generate-historical-metrics

def main(client, customer_id):     """The main method that creates all necessary entities for the example.     Args:         client: an initialized GoogleAdsClient instance.         customer_id: a client customer ID.     """     generate_historical_metrics(client, customer_id) def generate_historical_metrics(client, customer_id):     """Generates historical metrics and prints the results.     Args:         client: an initialized GoogleAdsClient instance.         customer_id: a client customer ID.     """     googleads_service = client.get_service("GoogleAdsService")     keyword_plan_idea_service = client.get_service("KeywordPlanIdeaService")     request = client.get_type("GenerateKeywordHistoricalMetricsRequest")     request.customer_id = customer_id     request.keywords = ["mars cruise", "cheap cruise", "jupiter cruise"]     # Geo target constant 2840 is for USA.     request.geo_target_constants.append(         googleads_service.geo_target_constant_path("2840")     )     request.keyword_plan_network = (         client.enums.KeywordPlanNetworkEnum.GOOGLE_SEARCH     )     # Language criteria 1000 is for English. For the list of language criteria     # IDs, see:     # https://developers.google.com/google-ads/api/reference/data/codes-formats#languages     request.language = googleads_service.language_constant_path("1000")     response = keyword_plan_idea_service.generate_keyword_historical_metrics(         request=request     )     for result in response.results:         metrics = result.keyword_metrics         # These metrics include those for both the search query and any variants         # included in the response.         print(             f"The search query '{result.text}' (and the following variants: "             f"'{result.close_variants if result.close_variants else 'None'}'), "             "generated the following historical metrics:\n"         )         # Approximate number of monthly searches on this query averaged for the         # past 12 months.         print(f"\tApproximate monthly searches: {metrics.avg_monthly_searches}")         # The competition level for this search query.         print(f"\tCompetition level: {metrics.competition}")         # The competition index for the query in the range [0, 100]. This shows         # how competitive ad placement is for a keyword. The level of         # competition from 0-100 is determined by the number of ad slots filled         # divided by the total number of ad slots available. If not enough data         # is available, undef will be returned.         print(f"\tCompetition index: {metrics.competition_index}")         # Top of page bid low range (20th percentile) in micros for the keyword.         print(             f"\tTop of page bid low range: {metrics.low_top_of_page_bid_micros}"         )         # Top of page bid high range (80th percentile) in micros for the         # keyword.         print(             "\tTop of page bid high range: "             f"{metrics.high_top_of_page_bid_micros}"         )         # Approximate number of searches on this query for the past twelve         # months.         for month in metrics.monthly_search_volumes:             print(                 f"\tApproximately {month.monthly_searches} searches in "                 f"{month.month.name}, {month.year}"             )        

I am trying to replicate the Google Ads API Laravel Sample app and port it to a Laravel Jetstream application.

I keep getting the following error: Target class [GoogleAdsApiController] does not exist.

GoogleAdsApiController

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Google\Ads\GoogleAds\Lib\V15\GoogleAdsClient; use Google\Ads\GoogleAds\Util\FieldMasks; use Google\Ads\GoogleAds\Util\V15\ResourceNames; use Google\Ads\GoogleAds\V15\Enums\CampaignStatusEnum\CampaignStatus; use Google\Ads\GoogleAds\V15\Resources\Campaign; use Google\Ads\GoogleAds\V15\Services\CampaignOperation; use Google\Ads\GoogleAds\V15\Services\GoogleAdsRow; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\View\View; class GoogleAdsApiController extends Controller{     private const REPORT_TYPE_TO_DEFAULT_SELECTED_FIELDS = [         'campaign' => ['campaign.id', 'campaign.name', 'campaign.status'],         'customer' => ['customer.id']     ];     private const RESULTS_LIMIT = 100;  ... 

Routes/Web.php

<?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\GoogleAdsApiController; Route::middleware([     'auth:sanctum',     config('jetstream.auth_session'),     'verified', ])->group(function () {     Route::get('/dashboard', function () {         return view('dashboard');     })->name('dashboard'); }); Route::post(     'pause-campaign',     'GoogleAdsApiController@pauseCampaignAction' ); Route::match(     ['get', 'post'],     'show-report',     'GoogleAdsApiController@showReportAction' );  Route::get('/', function () {     return view('welcome'); }); Route::get('/main', function () {     return view('main'); }); 

Any help is much appreciated