Angular 9+ Google api module (ng-gapi)
This module will add the google api to your project.
It wraps the Gapi in to a service layer allowing to work with Gapi
in a Angular 9+ project.
made by codeforges
Latest News
We have started to work on our video tutorials series, Angular + NestJs a full fledged application.
Latest change
- Requires now Typescript version 3.8.3 or higher
- Requires Angular9 or higher
Installation
npm install ng-gapi
Usage
DEMO stackblitz
To use the ng-gapi
simply add GoogleApiModule
to your module imports
and set the configuration.
ClientConfig interface
Bellow are all available parameters that can be provided in the forRoot()
method.
export interface NgGapiClientConfig extends ClientConfig {
discoveryDocs: string[];
}
interface ClientConfig {
client_id?: string;
cookie_policy?: string;
scope?: string;
fetch_basic_profile?: boolean;
hosted_domain?: string;
openid_realm?: string;
ux_mode?: "popup" | "redirect";
redirect_uri?: string;
}
Example:
import {
GoogleApiModule,
GoogleApiService,
GoogleAuthService,
NgGapiClientConfig,
NG_GAPI_CONFIG,
GoogleApiConfig
} from "ng-gapi";
let gapiClientConfig: NgGapiClientConfig = {
client_id: "CLIENT_ID",
discoveryDocs: ["https://analyticsreporting.googleapis.com/$discovery/rest?version=v4"],
scope: [
"https://www.googleapis.com/auth/analytics.readonly",
"https://www.googleapis.com/auth/analytics"
].join(" ")
};
@NgModule({
imports: [
GoogleApiModule.forRoot({
provide: NG_GAPI_CONFIG,
useValue: gapiClientConfig
}),
]
})
export MyModule {}
Now you will have Access to the GoogleApi service.
The service has a a event method onLoad(callback)
This event will fire when the gapi script is loaded.
Usage example :
export class FooService {
constructor(gapiService: GoogleApiService) {
gapiService.onLoad().subscribe(()=> {
});
}
}
Also check the example folder with a google api reports module
GoogleAuthService
The module has a GoogleAuth service which allows you to work with
the google auth
Usage:
@Injectable()
export class UserService {
public static SESSION_STORAGE_KEY: string = 'accessToken';
private user: GoogleUser;
constructor(private googleAuth: GoogleAuthService){
}
public getToken(): string {
let token: string = sessionStorage.getItem(UserService.SESSION_STORAGE_KEY);
if (!token) {
throw new Error("no token set , authentication required");
}
return sessionStorage.getItem(UserService.SESSION_STORAGE_KEY);
}
public signIn(): void {
this.googleAuth.getAuth()
.subscribe((auth) => {
auth.signIn().then(res => this.signInSuccessHandler(res));
});
}
private signInSuccessHandler(res: GoogleUser) {
this.user = res;
sessionStorage.setItem(
UserService.SESSION_STORAGE_KEY, res.getAuthResponse().access_token
);
}
}
Lets go step by step through the example
- We create a angular Injectable() "service"
- The static property
SESSION_STORAGE_KEY
is just a sugar to store string in a property rather then hardcode - in the constructor we inject the GoogleAuthService and making it a private property of our User class
- no we have 2 public methods , sign in and get token. The signIn should be used at user login page , it will open the google
auth popup.
- The get token method is used for http request to google resource where a authentication is required.
Batch requests
From gapi docs https://developers.google.com/api-client-library/javascript/features/batch
we should use gapi.client.newBatch()
But in our case we have typings and OOP, so we can do this:
export class FooService {
constructor(gapiService: GoogleApiService) {
gapiService.onLoad().subscribe(()=> {
const myBatch: HttpBatch = new HttpBatch();
myBatch.add(
);
});
}
}
Configurations
The GoogleApiConfig class provides the required configuration for the Api
Configuration is easy to use. The GoogleApiModule has a static method which sets the configs.
As shown in the example you simply provide a configuration object of type ClientConfig
.
{
client_id: "your client id",
discoveryDocs: ["url to discovery docs", "another url"],
scope: "space separated scopes"
}
Configure them according your google app configurations and resource scope.
Promotion
We are providing Web Development and Consulting Services.
codeforges.com