feat(sign-in-with-apple): Added Sign in with Apple (#3200)

* feat(Sign in with Apple): Added Sign in with Apple

* docs(Sign in with Apple): Updated interfaces to official ones
This commit is contained in:
Patrick Bußmann 2019-10-30 16:54:14 +01:00 committed by Daniel Sogl
parent 2312665792
commit ec933011e6

View File

@ -0,0 +1,162 @@
import { Injectable } from '@angular/core';
import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
/**
* @see https://developer.apple.com/documentation/foundation/nspersonnamecomponents/1412193-phoneticrepresentation
*/
export interface NSPersonNameComponents {
/**
* The portion of a names full form of address that precedes the name itself (for example, "Dr.," "Mr.," "Ms.")
*/
namePrefix?: string;
/**
* Name bestowed upon an individual to differentiate them from other members of a group that share a family name (for example, "Johnathan")
*/
givenName?: string;
/**
* Secondary name bestowed upon an individual to differentiate them from others that have the same given name (for example, "Maple")
*/
middleName?: string;
/**
* Name bestowed upon an individual to denote membership in a group or family. (for example, "Appleseed")
*/
familyName?: string;
/**
* The portion of a names full form of address that follows the name itself (for example, "Esq.," "Jr.," "Ph.D.")
*/
nameSuffix?: string;
/**
* Name substituted for the purposes of familiarity (for example, "Johnny")
*/
nickname?: string;
/**
* The phonetic representation name components of the receiver
*/
phoneticRepresentation?: NSPersonNameComponents;
}
/**
* @see https://developer.apple.com/documentation/authenticationservices/asauthorizationappleidcredential
*/
export interface AppleSignInResponse {
/**
* The users email address i.e. abc@privaterelay.appleid.com
*/
email?: string;
/**
* An arbitrary string that your app provided to the request that generated the credential
*/
state?: string;
/**
* A JSON Web Token (JWT) that securely communicates information about the user to your app
*/
identityToken: string;
/**
* A short-lived token used by your app for proof of authorization when interacting with the app's server counterpart
*/
authorizationCode: string;
/**
* The user's name
* @see https://developer.apple.com/documentation/foundation/nspersonnamecomponents?language=objc
*/
fullName?: NSPersonNameComponents;
/**
* An identifier associated with the authenticated user
*/
user?: string;
}
/**
* @see https://developer.apple.com/documentation/foundation/nserror
*/
export interface NSError {
/**
* The error code
*/
code?: number;
/**
* A string containing the localized description of the error
*/
localizedDescription?: string;
/**
* A string containing the localized explanation of the reason for the error
*/
localizedFailureReason?: string;
}
export interface AppleSignInErrorResponse extends NSError {
/**
* The error i.e. "ASAUTHORIZATION_ERROR"
*/
error?: string;
}
/**
* @name Sign In With Apple
* @description
* Sign in with Apple makes it easy for users to sign in to your apps and websites using their Apple ID.
* Instead of filling out forms, verifying email addresses, and choosing new passwords,
* they can use Sign in with Apple to set up an account and start using your app right away.
* All accounts are protected with two-factor authentication for superior security,
* and Apple will not track users activity in your app or website.
* *Source:* https://developer.apple.com/sign-in-with-apple/
*
* @usage
* ```typescript
* import { SignInWithApple, AppleSignInResponse, AppleSignInErrorResponse } from '@ionic-native/sign-in-with-apple/ngx';
*
*
* constructor(private signInWithApple: SignInWithApple) { }
*
* ...
*
*
* this.signInWithApple.signin()
* .then((res: AppleSignInResponse) => {
* // https://developer.apple.com/documentation/signinwithapplerestapi/verifying_a_user
* alert('Send token to apple for verification: ' + res.identityToken);
* console.log(res);
* })
* .catch((error: AppleSignInErrorResponse) => {
* alert(error.code + ' ' + error.localizedDescription);
* console.error(error);
* });
*
* ```
*/
@Plugin({
pluginName: 'Sign in with Apple',
plugin: 'cordova-plugin-sign-in-with-apple',
pluginRef: 'cordova.plugins.SignInWithApple',
repo: 'https://github.com/twogate/cordova-plugin-sign-in-with-apple',
platforms: ['iOS']
})
@Injectable()
export class SignInWithApple extends IonicNativePlugin {
/**
* Starts the authorization flows named during controller initialization
* @see https://developer.apple.com/documentation/authenticationservices/asauthorizationcontroller/3153047-performrequests
* @return {Promise<AppleSignInResponse>} Returns a promise when authorization succeeds
* @param arg0
* @throws AppleSignInErrorResponse
*/
@Cordova()
signin(arg0: object = null): Promise<AppleSignInResponse> {
return;
}
}