Use Google Analytics API to show information in C#

后端 未结 7 1364
难免孤独
难免孤独 2020-12-02 05:07

I been looking for a good solution all day but google evolve so fast that I can\'t find something working. What I want to do is that, I have a Web app that has an admin sect

相关标签:
7条回答
  • 2020-12-02 06:14

    Another Working Approach

    Add below code in the ConfigAuth

      var googleApiOptions = new GoogleOAuth2AuthenticationOptions()
            {
                AccessType = "offline", // can use only if require
                ClientId = ClientId,
                ClientSecret = ClientSecret,
                Provider = new GoogleOAuth2AuthenticationProvider()
                {
                    OnAuthenticated = context =>
                    {
                        context.Identity.AddClaim(new Claim("Google_AccessToken", context.AccessToken));
    
                        if (context.RefreshToken != null)
                        {
                            context.Identity.AddClaim(new Claim("GoogleRefreshToken", context.RefreshToken));
                        }
                        context.Identity.AddClaim(new Claim("GoogleUserId", context.Id));
                        context.Identity.AddClaim(new Claim("GoogleTokenIssuedAt", DateTime.Now.ToBinary().ToString()));
                        var expiresInSec = 10000;
                        context.Identity.AddClaim(new Claim("GoogleTokenExpiresIn", expiresInSec.ToString()));
    
    
                        return Task.FromResult(0);
                    }
                },
    
                SignInAsAuthenticationType = DefaultAuthenticationTypes.ApplicationCookie
            };
            googleApiOptions.Scope.Add("openid"); // Need to add for google+ 
            googleApiOptions.Scope.Add("profile");// Need to add for google+ 
            googleApiOptions.Scope.Add("email");// Need to add for google+ 
            googleApiOptions.Scope.Add("https://www.googleapis.com/auth/analytics.readonly");
    
            app.UseGoogleAuthentication(googleApiOptions);
    

    Add below code, name spaces and relative references

     using Google.Apis.Analytics.v3;
     using Google.Apis.Analytics.v3.Data;
     using Google.Apis.Auth.OAuth2;
     using Google.Apis.Auth.OAuth2.Flows;
     using Google.Apis.Auth.OAuth2.Responses;
     using Google.Apis.Services;
     using Microsoft.AspNet.Identity;
     using Microsoft.Owin.Security;
     using System;
     using System.Threading.Tasks;
     using System.Web;
     using System.Web.Mvc;
    
    public class HomeController : Controller
    {
        AnalyticsService service;
        public IAuthenticationManager AuthenticationManager
        {
            get
            {
                return HttpContext.GetOwinContext().Authentication;
            }
        }
    
        public async Task<ActionResult> AccountList()
        {
            service = new AnalyticsService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = await GetCredentialForApiAsync(),
                ApplicationName = "Analytics API sample",
            });
    
    
            //Account List
            ManagementResource.AccountsResource.ListRequest AccountListRequest = service.Management.Accounts.List();
            //service.QuotaUser = "MyApplicationProductKey";
            Accounts AccountList = AccountListRequest.Execute();
    
    
    
            return View();
        }
    
        private async Task<UserCredential> GetCredentialForApiAsync()
        {
            var initializer = new GoogleAuthorizationCodeFlow.Initializer
            {
                ClientSecrets = new ClientSecrets
                {
                    ClientId = ClientId,
                    ClientSecret = ClientSecret,
                },
                Scopes = new[] { "https://www.googleapis.com/auth/analytics.readonly" }
            };
            var flow = new GoogleAuthorizationCodeFlow(initializer);
    
            var identity = await AuthenticationManager.GetExternalIdentityAsync(DefaultAuthenticationTypes.ApplicationCookie);
            if (identity == null)
            {
                Redirect("/Account/Login");
            }
    
            var userId = identity.FindFirstValue("GoogleUserId");
    
            var token = new TokenResponse()
            {
                AccessToken = identity.FindFirstValue("Google_AccessToken"),
                RefreshToken = identity.FindFirstValue("GoogleRefreshToken"),
                Issued = DateTime.FromBinary(long.Parse(identity.FindFirstValue("GoogleTokenIssuedAt"))),
                ExpiresInSeconds = long.Parse(identity.FindFirstValue("GoogleTokenExpiresIn")),
            };
    
            return new UserCredential(flow, userId, token);
        }
    }
    

    Add this in the Application_Start() in Global.asax

      AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;
    
    0 讨论(0)
提交回复
热议问题