从 Google_Service_AnalyticsReporting (google/apiclient SDK) 切换到 BetaAnalyticsDataClient (google/analytics-data SDK)

2023-12-23

我正在将 Google Analytics(分析)媒体资源从 UA 切换到 GA4,并尝试使用数据 API 提取 GA4 媒体资源的 Google Analytics(分析)数据。我目前正在使用 google/apiclient PHP SDK 来处理 UA 属性,但需要切换到 google/analytics-data SDK 来处理 GA4 属性。我能找到的所有凭据文档都是为使用服务帐户而编写的。不幸的是,我们当前的设置无法使用服务帐户,需要以用户身份登录[电子邮件受保护] /cdn-cgi/l/email-protection这是已添加到我们帐户内的属性上的电子邮件/用户。

对于 google/apiclient SDK,我们的连接如下:

$appName = 'My Analytics App';
// Decoded from json file for example
$clientAuthFileData = [
    'web' => [
        'client_id'                   => '######-#######.apps.googleusercontent.com',
        'project_id'                  => 'my-project-name',
        'auth_uri'                    => 'https://accounts.google.com/o/oauth2/auth',
        'token_uri'                   => 'https://oauth2.googleapis.com/token',
        'auth_provider_x509_cert_url' => 'https://www.googleapis.com/oauth2/v1/certs',
        'client_secret'               => 'XXXXXXXXXXX',
        'redirect_uris'               =>
            [
                'https://site1.com/authorize.php',
                'https://site2.com/authorize.php',
                'https://site3.com/authorize.php',
                'https://site4.com/authorize.php',
                'https://site5.com/authorize.php',
            ],
    ],
];
// Decoded from json file for example
$authFileData       = [
    'access_token'  => 'XXXXXXXX',
    'expires_in'    => 3600,
    'refresh_token' => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
    'scope'         => 'https://www.googleapis.com/auth/userinfo.email openid https://www.googleapis.com/auth/analytics.readonly',
    'token_type'    => 'Bearer',
    'id_token'      => 'XXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXX',
    'created'       => 1553570124,
];

$client = new Google_Client();
$client->setApplicationName( $appName );
$client->setAccessType( "offline" );
$client->setAuthConfig( $clientAuthFileData );
$client->fetchAccessTokenWithRefreshToken( $authFileData['refresh_token'] );

$client = new Google_Service_AnalyticsReporting( $client );

要使用 google/analytics-data SDK 中的服务帐户执行相同的调用,如下所示:

// Decoded from json file for example
$serviceAccountCredentials = '{
  "type": "service_account",
  "project_id": "my-project-name",
  "private_key_id": "XXXXXXXXXX",
  "private_key": "-----BEGIN PRIVATE KEY-----XXXXXXXXX\n-----END PRIVATE KEY-----\n",
  "client_email": "[email protected] /cdn-cgi/l/email-protection",
  "client_id": "XXXXXXXXXX",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/name%40my-project-name.iam.gserviceaccount.com"
}';

$client = new BetaAnalyticsDataClient( [
    'credentials' => json_decode( $serviceAccountCredentials, true ),
] );

对于 GA4,我尝试了以下操作:

/*
THROWS
Fatal error: Uncaught InvalidArgumentException: json key is missing the type field in /var/www/html/vendor/google/auth/src/CredentialsLoader.php on line 150

InvalidArgumentException: json key is missing the type field in /var/www/html/vendor/google/auth/src/CredentialsLoader.php on line 150
*/
$client = new BetaAnalyticsDataClient( [
    'credentials' => $clientAuthFileData,
] );

/*
THROWS
Fatal error: Uncaught DomainException: Could not load the default credentials. Browse to https://developers.google.com/accounts/docs/application-default-credentials for more information in /var/www/html/vendor/google/gax/src/CredentialsWrapper.php on line 267
Google\ApiCore\ValidationException: Could not construct ApplicationDefaultCredentials in /var/www/html/vendor/google/gax/src/CredentialsWrapper.php on line 267
 */
$client = new BetaAnalyticsDataClient( [
    'keyFile' => $clientAuthFileData,
] );

如何使用 google/apiclient SDK 使用的相同 OAuth 详细信息进行连接?


我设法在不指定范围的情况下做同样的事情。我认为这是没有必要的,因为它没有写在文档中,而且它对我来说工作得很好。我只使用了我的 json 文件,它是我的服务器端密钥。

$config = [
    'credentials' => "/PATH/TO/JSON/FILE",
];

$client = new BetaAnalyticsDataClient($config);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Google_Service_AnalyticsReporting (google/apiclient SDK) 切换到 BetaAnalyticsDataClient (google/analytics-data SDK) 的相关文章

  • 禁用 WooCommerce 手动/编辑订单的电子邮件通知

    需要 WooCommerce 专业知识 我需要禁用手动创建的订单的电子邮件通知 我必须使用处理状态 由于处理订单状态的自定义挂钩 我无法创建自定义状态 理想情况下 手动订单页面中可以勾选一个复选框 勾选后 它将禁止在每种状态下向客户发送电子
  • 如何将图像从 Android 应用程序上传到网络服务器的特定文件夹中

    如何将图像从 android 移动到 Web 服务器上的指定文件夹 这是我的安卓代码 package com example bitmaptest import java io ByteArrayOutputStream import ja
  • PHP条件,如果当前页面,则链接突出显示[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有一个带
  • 正则表达式上的换行符

    我试图替换两个标签之间的所有内容 但我无法构建正确的表达式 这就是我所做的
  • Laravel Auth:attempt() 不会持久登录

    我在网上找到了许多有类似问题的资源 但似乎没有一个解决方案可以解决我的问题 当我使用以下代码登录用户时 一切看起来都很好 email Input get email password Input get password if Auth a
  • Smarty 如果 URL 包含

    使用 Smarty 标签我想确定 URL 是否包含单词 例如 if smarty get page contains product php 我知道 contains 不存在 但是我怎样才能轻松地编写类似的东西来实现上述代码呢 所有 PHP
  • php源代码到PO文件生成器

    我必须将我的所有回显 打印字符串转换为PHP源代码代码文件到PO file 为了语言翻译 有批次吗对流器可用于相同的 我如何做到这一点 make gettext在您的服务器上运行 setup a 翻译适配器 例如带有 gettext 适配器
  • laravel - 使用请求类或输入类

    在宁静的控制器中 我应该使用哪个类来获取传递的变量 member gt email Input get email or member gt email Request get email 两种选择都适合我 但有什么区别 Input get
  • 如何隐藏 URL 中的锚标记

    如何隐藏地址栏中以下链接 href 的哈希值 a href index php dev name 所以它会将我重定向到index php dev name 但我希望地址栏只显示index php 您可以使用 Javascript oncli
  • 如何关闭未关闭的 HTML 标签?

    每当我们从数据库或类似来源获取一些经过编辑的用户输入内容时 我们可能会检索仅包含开始标记但不包含结束标记的部分 这可能会妨碍网站当前的布局 有客户端或服务器端的方法来解决这个问题吗 找到了一个很好的答案 使用 PHP 5 并使用 DOMDo
  • 在我的 index.php 中加载 CSS 和 JS 等资源时出现错误 403

    我使用的是 Linux Elementary OS 并在 opt 中安装了 lampp My CSS and JS won t load When I inspect my page through browser The console
  • PHP 无法加载动态库“php_pdo_oci.dll”

    我在 Windows 8 上运行 Apache 2 4 7 和 PHP 5 5 9 我安装了 PHPUnit 并开始弹出此警告图像 警告 是的 我在 php ini 中启用了扩展加载以及 extension dir 以更正文件夹 并且该文件
  • 未传递“client_reference_id”参数

    我使用 Stripe Checkout Stripe 版本 2016 07 06 我想通过参数 client reference id 恢复个性化数据 但在 JSON 中 当我有金额或电子邮件时 我找不到它 我是在测试环境中 你能帮我吗 先
  • 编辑 HTACCESS 文件以防止直接访问特定文件夹中的特定文件

    我试图阻止直接访问子文件夹中的特定文件 我意识到这个论坛上有很多描述类似问题的主题 但是 我的似乎有点尴尬 由于我已经存在 HTACCESS 文件 这是文件的文件路径 www example com PRINCIPAL PROJECTS m
  • 如何在多次尝试后延迟登录尝试 (PHP)

    我正在开发一个用 PHP 构建的相当大的网站 该网站可能会有很多用户 我正在寻找一种方法来保护登录屏幕免受自动尝试的影响 我已经在注册表中添加了验证码检查 但还想进一步强化网站 据我所知 StackOverflow 上也有类似的问题 而且我
  • 重写 URL,将 ID 替换为查询字符串中的标题

    我对 mod rewrite 很陌生 但我做了一些搜索 但找不到这个问题的答案 我有一个网站 它只有一个 PHP 页面 根据查询字符串中传递给它的 ID 提供数十页内容 我想重写 URL 以便此 ID消失并替换为从数据库中提取的页面标题 例
  • Mysqli 更新抛出 Call to a member function bind_param() 错误[重复]

    这个问题在这里已经有答案了 我有一个 70 80 字段表单 需要插入到表中 因此我首先根据表单中的输入名称在数据库中创建了一个表 而不是手动创建一个巨大的插入语句 这是我使用的代码创建 更改表 function createTable ar
  • 从所有会话中注销

    我有一个注销选项 这是我的代码 session start session destroy setcookie key time 60 60 24 setcookie username time 60 60 24 我想添加另一个选项来注销所
  • 我可以在 PHP 会话变量中安全地存储用户名和密码吗?

    我想在 REST api 之上制作一个轻量级的 web 应用程序 用户只需进行一次身份验证 从那时起 所有针对 web api 的请求都希望通过以某种方式保持用户名和密码有效来完成 我已经做了一个工作原型我在哪里将用户名和密码存储在会话变量
  • 使用 PHP 将 latin1_swedish_ci 转换为 utf8

    我有一个数据库 里面充满了类似的值 Dhaka 应该是 Dhaka 因为我在创建数据库时没有指定排序规则 现在我想修复它 我无法从最初获取数据的地方再次获取数据 所以我在想是否可以在 php 脚本中获取数据并将其转换为正确的字符 我已将数据

随机推荐

  • MapView:找不到方法 B 引用的类 A

    屏幕上有3个按钮 开始 查看地图 停止 当我单击 查看地图 时 它应该转到显示地图的新屏幕 但出了点问题 应用程序被强制关闭 我不断收到无法找到方法 B 引用的类 A 错误 拜托请有人纠正它 我已经被这个问题困扰三天了 Main xml
  • typedef std 容器?

    我想做 typedef deque type error use of class template requires template argument list type
  • 编写 Z80 汇编程序 - 词法 ASM 并使用组合构建解析树?

    我对编写汇编器的概念非常陌生 即使在阅读了大量材料之后 我仍然很难理解几个概念 将源文件实际分解为令牌的过程是什么 我相信这个过程称为词法分析 我已经到处搜索有意义的真实代码示例 但我找不到如此简单的代码示例 非常受欢迎 解析时 信息是否需
  • MATLAB 中的复制求和运算符

    我正在尝试在 MATLAB 中对以下时间相关函数进行建模 其中 gamma beta 和 delta 是常数 我不确定进行求和的最佳方法是什么 我可以制作 u t 和 y t 函数句柄 但 symsum 只能用于符号 我唯一的选择是使用 f
  • 浮点差异取决于调试构建的运行方式

    我正在使用调试版本并在同一台计算机上获得不同的结果 无论我是否在调试器下运行 我正在使用优秀的 TestDriven Net 来运行单元测试 使用 TestDriven Net 或外部 NUnit 运行程序 运行 会产生相同的结果 使用 T
  • .NET 日志框架 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Java:解析 ISO_DATE / ISO_OFFSET_DATE

    对于 REST Web 服务 我需要返回带时区的日期 无时间 显然不存在这样的东西ZonedDate在 Java 中 仅LocalDate and ZonedDateTime 所以我用的是ZonedDateTime作为后备 将这些日期转换为
  • 在 ASP 中上传到 IIS 5.1

    首先 我知道 XP 不太擅长托管 但由于该网站仅供我个人使用 而且我已经拥有 XP 许可证 这就是我正在使用的 我正在使用来自的纯asp上传脚本链接文本 http www asp101 com articles jacob scriptup
  • Ubuntu 中的 MySQL JDBC jar 文件在哪里?

    我已经通过安装 MySQL 5 5 32apt get install进入 Ubuntu 13 04 我想在 Java 项目中使用它 为此我必须有 MySql 连接器 jar 我找不到它 我尝试过locate mysql jar但它没有发现
  • Scalaz 中 \/ 的“ap”有什么作用?

    我正在看析取 https github com scalaz scalaz blob scalaz seven core src main scala scalaz Either scalascalaz 的类型和我注意到的方法ap Appl
  • 是否有可能在 SASS 中使用 CSS 变量?

    我有不同的树枝模板 应该用不同的颜色渲染 除了颜色主题之外 每个模板通过 SASS 的样式都是相同的 这就是为什么我想在每个模板中设置一个 CSS 变量 我认为 SASS 变量看起来像这样 pim color var color prima
  • 有流畅界面的经验吗?我需要你的意见!

    抱歉这个很长的问题 它被标记为维基百科 因为我要求的东西可能没有非常具体的答案 既然关了 那就这样吧 我的主要问题是 如何编写一个在基类中未完全定义的流畅接口 以便使用流畅接口的程序可以在现有结构中添加新单词 并且仍然保持一个引导界面 以便
  • 无法找到或加载主类 com.android.sdkmanager.Main

    I read these https stackoverflow com questions 4394584 android sdk install problem rq 1 还有这些 https stackoverflow com que
  • Maven:在一个阶段中将插件的多次执行与其他插件的执行交错

    我需要在预集成测试阶段执行以下操作 sql maven 插件 执行 jetty maven 插件 部署战争 sql maven 插件 执行 步骤 1 和 3 具有不同的配置 我尝试将 1 和 3 定义为单独的插件元素 但我相信 Maven
  • 如何使用更新的 api url 从同一组件调用 getServerSideProps?

    我想传递此函数中的参数 以便在应用某些过滤器时在同一页面上获取更新 过滤的数据 这对于初始渲染工作正常 但我无法从同一组件获取更新的数据 因为该 getServerSideProps 函数位于我的组件之外 我的组件 let API URL
  • 如何格式化 grep 输出以在行尾显示行号以及命中计数?

    我正在使用 grep 来匹配文件中的字符串 这是一个示例文件 example one example two null example three example four null grep i null myfile txt回报 exa
  • 无法获取多个php页面的登录用户信息

    我想获取多个页面中的用户信息 以便我可以根据多个页面中的登录用户显示和隐藏信息 代码 我可以在dashboard php中获取role id 但我在每个页面中渲染master php 并且我
  • jquery嵌套可排序列表

    我有这个代码 document ready function test list sortable items gt li handle handle axis y opacity 0 6 update function var order
  • UIKeyboardTypeNamePhonePad 类型的键盘可以在电话模式下启动吗?

    有没有办法让 UIKeyboardTypeNamePhonePad 类型的键盘以电话号码键盘模式而不是字母模式启动 键盘可以很好地满足我的需要 但我希望它以 其他 模式启动 因为这更有可能是用户输入的内容 我相信通过设置keyboardTy
  • 从 Google_Service_AnalyticsReporting (google/apiclient SDK) 切换到 BetaAnalyticsDataClient (google/analytics-data SDK)

    我正在将 Google Analytics 分析 媒体资源从 UA 切换到 GA4 并尝试使用数据 API 提取 GA4 媒体资源的 Google Analytics 分析 数据 我目前正在使用 google apiclient PHP S