- Create an ionic project
 
> ionic start myproject 
- Give a package id in file >myproject/config.xml
 
<widget id="com.mycompany.tasks" version="0.0.8" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
- Add firebase credentials into >myproject/src/environments/envirornment.ts
 
export const environment = {
  production: false,
  firebase: {
    apiKey: "....",
    authDomain: "....",
    databaseURL: "....",
    projectId: "....",
    storageBucket: "....",
    messagingSenderId: "....",
    appId: "....",
    measurementId: "...."
  }
};
- Add an App by going to Firebase console > Your project > Project settings
 
Download the GoogleService-Info.plist file produced in this 
- Enable Passwordless authentication
 
- Build your project
 
> ionic build
(This will load contents in www folder)
- Setup Firebase hosting
 
> npm install -g firebase-tools
> firebase login
> firebase init hosting
(This this step provide www as the public folder. You need to be in your project base folder for this)'
> firebase deploy
Next goto Firebase>Develop>Hosting and note down the hosting domain
It will be something like yourproject.firebaseapp.com
- Setup Firebase Dynamiclink domain. It's in the Grow section
 
It will be something like yourproject.page.link
- Add Firebase Dynamiclink plugin
 
As a prep step, add yourproject.firebaseapp.com and yourproject.page.link to Authorized Domain in Firebase. Project setttings> Authentication > Sign-in method > Authorize Domain (scroll down)
> cordova plugin add cordova-plugin-firebase-dynamiclinks --variable APP_DOMAIN="yourproject.firebaseapp.com" --variable PAGE_LINK_DOMAIN="yourproject.page.link"
- Install ionic native libraries
 
> npm install @ionic-native/firebase-dynamic-links
- Build for iOS
 
> ionic cordova build ios
- Preparing
 
 Copy the downloaded GoogleService-Info.plist to platforms/ios/resources/ios/GoogleService-Info.plist
Add following to config.xml, <platform name="ios"> section
<resource-file src="resources/ios/GoogleService-Info.plist" />
        <preference name="GoogleIOSClientId" value="client id in GoogleService-Info.plist" />
 </platform>
- Create Login page
 
> ionic g page login
In login.page.html
...
<ion-content>
  <ion-item>
    <ion-label>Email</ion-label>
    <ion-input [(ngModel)]="email"></ion-input>
  </ion-item>
<ion-button (click)="sendEmail(email)">Send</ion-button>
</ion-content>
In login.page.ts
import { Component } from "@angular/core";
import { AngularFireAuth } from "@angular/fire/auth";
import { FirebaseDynamicLinks } from "@ionic-native/firebase-dynamic-links/ngx";
import { Platform } from "@ionic/angular";
import { Router } from '@angular/router';
@Component({
  selector: "app-login",
  templateUrl: "login.page.html",
})
export class LoginPage {
constructor(
    private firebaseDynamicLinks: FirebaseDynamicLinks,
    private firebaseAuth: AngularFireAuth,
    private platform: Platform,
    private router: Router
  ) {
    this.platform.ready().then(() => {
      this.firebaseDynamicLinks.onDynamicLink().subscribe(
        (resp: any) => {
          firebaseAuth.auth
            .signInWithEmailLink(this.email, resp["deepLink"])
            .then(() => {
              this.router.navigate(["/home"]);
            })
            .catch(err => {console.error(err););
            });
        },
        (err: any) => { console.error(err);}
      );
    });
  }
async sendEmailLink() {
    var actionCodeSettings = {
      // Redirect url
      url: "https://yourproject.firebaseapp.com/login",
      handleCodeInApp: true,
      iOS: {
        bundleId: "com.mycompany.tasks"
      }     
    };
try {
      await this.firebaseAuth.auth.sendSignInLinkToEmail(
        this.email,
        actionCodeSettings
      );
    } catch (err) {
      console.error(err);
    }
  }
}
- Next
 
. Deploy the iOS app using Xcode
. In the Login page that you see in the app, enter your email and click Send
. You will then get an email from Firebase with this sort of content.
Hello,
We received a request to sign in to project-xxxxxxx using this email address. If you want to sign in with your youremail@someemail.com account, click this link:
Sign in to project-xxxxxx
If you did not request this link, you can safely ignore this email.
Thanks,
Your project-xxxxxxx team
Click on the Sign in link from your mobile, this should open the app again and home page will be loaded.



No comments:
Post a Comment