确定Google用户的域是否安装了我的市场应用程序

布列特约涅斯杰夫

用户登录后,我要检查其域是否安装了我的Marketplace应用。从理论上讲,这可以通过Marketplace License API端点来实现

但是,每当我尝试对“客户许可证”,“用户许可证”或“许可证通知”端点使用“立即尝试”功能时,始终会收到“ 403禁止访问”,并显示消息“未授权访问应用程序ID”。

例如,如果我尝试查询LicenseNotification端点,请执行以下操作:

单击“授权”切换,然后单击“授权”以为我的登录用户(拥有该应用程序的Google Apps Admin帐户,btw)授权该范围。

对于applicationId,然后在旧的开发人员控制台的Google Apps Marketplace SDK设置中输入12位的“应用程序ID”字段(在新的开发人员控制台应用程序概述页面中也称为项目编号)。

当我单击执行时,我得到403“未授权访问应用程序ID”。我还尝试使用我的项目ID(即开发者控制台概述页面中的“ my-app”)代替项目编号/应用ID,并得到相同的响应。

我在这里想念什么吗?

另外,如果有人知道让GAM应用程序拥有者查询已安装域的列表的另一种方式,那对我来说也是一个理想的解决方案-我找不到这样的东西。

布列特约涅斯杰夫

好吧,请阅读更多内容并最终弄明白了。

我所缺少的是以下事实:授权端点的身份验证要求您使用服务帐户,而不是常规用户帐户。这就是为什么文档页面上的“立即尝试”功能根本不起作用的原因。

不幸的是,我们使用PHP,而google-api-php-client尚不提供许可API的服务。但是,客户端项目确实显示使用服务帐户而非普通用户OAuth2流的示例

我使用了这个示例,并从Resource.phpcall方法中窃取了一些源代码来调用Customer License端点,以检查域是否安装了我们的应用程序:

$privateKey = file_get_contents('path/to/private-key.p12');
$serviceAccountName = '[email protected]';

$cred = new \Google_Auth_AssertionCredentials(
    $serviceAccountName,
    array('https://www.googleapis.com/auth/appsmarketplace.license'),
    $privateKey
);
$client = new \Google_Client();
$client->setApplicationName('Apps_Marketplace_Licensing_Check');
$client->setAssertionCredentials($cred);
if ($client->getAuth()->isAccessTokenExpired()) {
    $client->getAuth()->refreshTokenWithAssertion($cred);
}


$url = \Google_Http_REST::createRequestUri(
    'appsmarket/v2/',
    'customerLicense/{appId}/{customerId}', [
        'appId' => ['location' => 'path', 'type' => 'string', 'value' => $appId], 
        'customerId' => ['location' => 'path', 'type' => 'string', 'value' => $domain]
    ]
);

$httpRequest = new \Google_Http_Request($url, 'GET');
$httpRequest->setBaseComponent($client->getBasePath());
$httpRequest = $client->getAuth()->sign($httpRequest);

/* returns JSON array */
$result = $client->execute($httpRequest);
$isDomainInstalled = ($result && isset($result['state']) && $result['state'] == 'ACTIVE');

希望google-api-php-client项目的人们最终会为这些端点添加真正的服务,但是就目前而言,这种解决方法还不是很痛苦。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何确定哪个用户安装了android应用程序?

检查是否从Google Play安装了应用程序

Facebook用户可以确定哪些朋友安装了应用程序吗?

确定是否使用Titanium首次安装了该应用程序

如何确定我以前的流星应用程序中安装了哪些软件包?

检查是否在用户设备上安装了“健康”应用程序。(迅速)

如何检查用户是否在网页中安装了移动应用程序?

从Deeplink重定向时,如何检查用户设备中是否安装了应用程序

以编程方式检查用户以前是否安装了应用程序

向所有安装了我的应用程序的用户发送 FCM 通知

我可以检查用户安装了哪些iOS应用程序以及购买了哪些应用程序?

我如何知道Safari是否已在iPhone上安装了应用程序

如何确定我是否安装了Google Chrome 64位?

Rails可以查看用户安装了哪些应用程序?

如何检查是否同时安装了应用程序(对于任何用户)并使其升级而不是安装?

确定我的应用程序从未安装在设备上以及用户是否正在重新安装的最佳方法是什么?

如何以编程方式确定应用程序是否以Play市场的捆绑销售形式运行

iMessage应用程序可检测接收方是否安装了相同的应用程序

如何确定同一用户是否正在我的应用程序中再次注册?

如何最好不在域内共享Google Web应用程序而不创建市场插件

我如何知道是否从Apple App Store或OSX中的其他商店安装了应用程序

如何检查应用程序是否已从Windows Phone市场预先加载或安装

如何更新从其他市场安装的 google play 应用程序?

从 Ubuntu 软件安装应用程序时是否安装了依赖项?

Google 登录应用程序(仅限域用户)- 正确设置

如何确定我的应用程序是否包含加密?

安装程序在哪里安装了WinForm应用程序?

Android应用程序是否可以暂时禁用“确定Google”?

如何检查用户是否已安装应用程序?