Dường như Google Analytics không thể tiêu thụ một generic GoogleCredential
và giải thích nó như là một ServiceAccountCredential
(mặc dù nó được thừa nhận, interally, mà nó thực sự là của loại). Vì vậy, bạn phải tạo ra một cách khó khăn ServiceAccountCredential
. Cũng không may là GoogleCredential
không hiển thị các thuộc tính khác nhau của thông tin đăng nhập, vì vậy tôi phải tự xây dựng.
Tôi đã sử dụng Trình tạo lớp C# JSON tại http://jsonclassgenerator.codeplex.com/ để tạo đối tượng ServiceAccountCredential "cá nhân" bằng thư viện JSON là phần tự động của API Google (Newtonsoft.Json), truy xuất các phần thiết yếu của tệp json đã tải xuống của tài khoản dịch vụ , để xây dựng thông tin xác thực được yêu cầu, sử dụng các thuộc tính khóa riêng và email của nó. Chuyển số ServiceAccountCredential
chính hãng cho nhà xây dựng dịch vụ GoogleAnalytics, dẫn đến đăng nhập thành công và quyền truy cập vào tài nguyên được phép của tài khoản đó.
mẫu mã làm việc dưới đây:
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Text;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using Google.Apis.Analytics.v3;
using Newtonsoft.Json;
.
.
.
try
{
// Get active credential
string credPath = _exePath + @"\Private-67917519b23f.json";
var json = File.ReadAllText(credPath);
var cr = JsonConvert.DeserializeObject<PersonalServiceAccountCred>(json); // "personal" service account credential
// Create an explicit ServiceAccountCredential credential
var xCred = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(cr.ClientEmail)
{
Scopes = new[] {
AnalyticsService.Scope.AnalyticsManageUsersReadonly,
AnalyticsService.Scope.AnalyticsReadonly
}
}.FromPrivateKey(cr.PrivateKey));
// Create the service
AnalyticsService service = new AnalyticsService(
new BaseClientService.Initializer()
{
HttpClientInitializer = xCred,
}
);
// some calls to Google API
var act1 = service.Management.Accounts.List().Execute();
var actSum = service.Management.AccountSummaries.List().Execute();
var resp1 = service.Management.Profiles.List(actSum.Items[0].Id, actSum.Items[0].WebProperties[0].Id).Execute();
Một số có thể tự hỏi những gì một Google tạo chứng chỉ tài khoản dịch vụ với PKI (Private Key) trông như thế nào. Từ Trình quản lý API của Google (IAM & Quản trị) tại https://console.developers.google.com/iam-admin/projects, hãy chọn dự án thích hợp (bạn có ít nhất một trong các dự án này). Bây giờ, hãy chọn Tài khoản dịch vụ (từ liên kết điều hướng bên trái) và TẠO TÀI KHOẢN DỊCH VỤ ở đầu màn hình. Điền tên, đặt hộp kiểm Cung cấp khóa riêng tư mới, sau đó nhấp vào Tạo. Google sẽ tự động tải xuống tệp JSON, có dạng như sau:
{
"type": "service_account",
"project_id": "atomic-acrobat-135",
"private_key_id": "508d097b0bff9e90b8d545f984888b0ef31",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIE...o/0=\n-----END PRIVATE KEY-----\n",
"client_email": "[email protected]",
"client_id": "1123573016559832",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/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/google-analytics%40atomic-acrobat-135923.iam.gserviceaccount.com"
}
Nguồn
2016-07-15 18:34:11
Có vẻ như ai đó đã sử dụng mã của bạn và sử dụng mã đó trên blog của mình. Coz bạn đã trả lời câu hỏi này vào năm 2016 và blog của anh ấy vừa mới xuất hiện. Câu hỏi của tôi là tôi có thể nhận được một mã thông báo truy cập bằng cách sử dụng này .. vì vậy tôi có thể sử dụng mã thông báo truy cập cho api nhúng. coz Tôi nhận được một mã thông báo truy cập null. – CyberNinja
Tôi đã quá lười biếng để sử dụng công cụ tạo lớp học của bạn. Vì vậy, thay vào đó tôi đã làm điều này: 'Newtonsoft.Json.Linq.JObject cr = (Newtonsoft.Json.Linq.JObject) JsonConvert.DeserializeObject (json); string s = (string) cr.GetValue ("private_key"); 'Cảm ơn câu trả lời của bạn-- nó đã giúp ích rất nhiều. – robertpb