Tuesday, January 8, 2019

Ionic content does not scroll when you add tap | press gesture



Hello All, This ionic scroll issue is mostly related to Android devices. I always face this issue in android only. It's within <ion-item> or <ion-card> or maybe some other tags. Please check below description for more information -


1. A solution for (tap) gesture -

To solve this issue please replace tap event with the click.

Issue -
<ion-item (tap)=“yourFunction()">

</ion-item>


Solution -
<ion-item (click)=“yourFunction()">

</ion-item>




2. A solution for (press) gesture -

Issue -
<ion-item (press)=“yourFunction()">

</ion-item>


Solution -
<ion-item (long-press)=“yourFunction()">

</ion-item>


First please create (press directive with selector name as long-press) a directive to solve this issue -

Now add below code in press directive -

import { Directive, ElementRef, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';
import { Gesture } from "ionic-angular/gestures/gesture";

@Directive({
  selector: '[long-press]'
})

export class PressDirective implements OnInit, OnDestroy {
  el: HTMLElement;
  pressGesture: Gesture;
  @Output('long-press') onPressRelease: EventEmitter = new EventEmitter();

  constructor(el: ElementRef) {
    this.el = el.nativeElement;
  }

  ngOnInit() {
    this.pressGesture = new Gesture(this.el);
    this.pressGesture.listen();

    this.pressGesture.on('press', (event) => {
      this.onPressRelease.emit('released');
    });
  }

  ngOnDestroy() {
    this.pressGesture.destroy();
  }
}


Now import this directive in your module file -

import { PressDirective } from '../directives/press/press';


@NgModule({
  declarations: [
    MyApp,
PressDirective,
],


});



Please check above all details. Hope so this will resolve your problem. If you still having any issue please add a comment on this post with some details. I will try to resolve your issue. Thanks!

Sunday, December 16, 2018

Failed to find 'ANDROID_HOME' environment variable



I am getting below error when I am trying to run project -

> cordova build android
Android Studio project detected
(node:15997) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Failed to find 'ANDROID_HOME' environment variable. Try setting it manually.
Failed to find 'android' command in your 'PATH'. Try update your 'PATH' to include path to valid SDK directory.


To resolve this issue please run below commands in the terminal -

export ANDROID_HOME="/Users/chetandeshmukh/Library/Android/sdk"
export PATH="$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools:$PATH"


How to find the Android SDK path?

First open android studio, Then click on SDK manager. For more info please check below image -



Now select Appearance & Behavior -> System Settings -> Android SDK



 Now copy your SDK location with the help of the above steps and update in command.


This process will set the Android Home path in your system.


Now try once again to run your project. This process will resolve your problem. If you still facing any issue please add your error in the comment section. We will resolve this. 

Sunday, December 9, 2018

Ionic round progressbar



To integrate this first we need to install the below module with the help of npm :

npm install angular-svg-round-progressbar --save

After installing this you need to import the RoundProgressModule in your module file :

import {NgModule} from '@angular/core';
import {RoundProgressModule} from 'angular-svg-round-progressbar';

@NgModule({
  imports: [RoundProgressModule]
})


Now in your page TS file add below lines -

export class RatePage {

  public selectedRange=0;

  
  constructor(public navCtrl: NavController) {

}

  close(){
    alert(this.selectedRange)
  }

  save(){
    alert(this.selectedRange)
  }

}


Now add below code in your html file -

<div class="main_box">
<div class="box">

 <div class="current">{{ selectedRange }}/{{ 100 }}</div>
 <round-progress
 [current]="selectedRange"
 [max]="100"
 [color]="'#45ccce'"
 [background]="'#eaeaea'"
 [radius]="80"
 [stroke]="20"
 [semicircle]="false"
 [rounded]="true"
 [clockwise]="true"
 [responsive]="false"
 [duration]="800"
 [animation]="'easeInOutQuart'"
 [animationDelay]="0"></round-progress>


<ion-range min="0" max="100" [(ngModel)]="selectedRange" color="secondary">
 <ion-label range-left>0</ion-label>
 <ion-label range-right>100</ion-label>
</ion-range>


<ion-row class="row">
 <ion-col class="col" col-6="">
     <button (click)="save()" class="login-btn button button-md button-default button-default-md" ion-button="" type="submit"><span class="button-inner">Submit
     </span><div class="button-effect"></div></button>
 </ion-col>
 <ion-col class="col" col-6="">
   <button (click)="close()" class="login-btn button button-md button-default button-default-md" ion-button="" type="submit"><span class="button-inner">Cancel
   </span><div class="button-effect"></div></button>
</ion-col>
</ion-row>


</div>

</div>


Add below code in your CSS file -

.scroll-content{
    padding: 0px !important;
}
.box{ margin: 0% 5%; padding: 0px 10px; font-size: 1.4rem; height: 60%; background-color: #fff; opacity: 1 !important; margin-top: 20%; border: 1px solid gray; }

round-progress{
    margin: 20% 25% 0% 25%;
}
.main_box{
    height: 100%;
}
[col-6]{
    text-align: center;
}
.range-md .range-knob, .range-ios .range-knob{
    width: 30px;
    height: 30px;
}
.range-md .range-bar, .range-ios .range-bar{
    top: 28px;
}
.label-md, .label-ios{ margin-top: 16px !important;}
.current {
    position: absolute;
    margin: 34% 25% 0% 35%;
    font-weight: 400;
    font-size: 2rem;
}


You can check more details on below link, also other options are available on below link -
https://github.com/crisbeto/angular-svg-round-progressbar

Check below demo link -
http://crisbeto.github.io/angular-svg-round-progressbar

Tuesday, November 27, 2018

Could not find play-services-tasks-license.aar (com.google.android.gms:play-services-tasks-license:11.8.0)



Could not find play-services-tasks-license.aar (com.google.android.gms:play-services-tasks-license:11.8.0).
Searched in the following locations:
    https://jcenter.bintray.com/com/google/android/gms/play-services-tasks-license/11.8.0/play-services-tasks-license-11.8.0.aar


Please follow below steps to solve this issue:-


Go to build.gradel 



and replace this -

buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }
}

with this -

buildscript {
    repositories {
        google()
        mavenCentral()
        jcenter()
    }
}


And replace this - 

allprojects {
    repositories {
        mavenCentral();
        jcenter()
    }
}


With this -

allprojects {
    repositories {
        google()
        mavenCentral();
        jcenter()
    }
}



Now - Click on “Sync Now”



If you again face this issue - 

A problem occurred evaluating root project 'android'. > Could not find method google() for arguments [] on repository container of type org.gradle.api.internal.artifacts.dsl.DefaultRepositoryHandler.


To resolve this issue add this line in your gradel file -

dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
    }


If you are having this issue in react native app. Please use this below lines in your gradel file -


buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
    }
}
allprojects {
    repositories {
        mavenLocal()
        jcenter()
        maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url "$rootDir/../node_modules/react-native/android"
        }
        google()
    }
}




Make sure to sync your project after doing all this. This will resolve your issue.

Thursday, November 8, 2018

ionic interview questions



Ionic interview questions  OR hybrid mobile app interview questions -

1. What is Ionic Framework?
The IONIC framework is an HTML5 platform that allows web developers (UI developer) to build hybrid mobile applications. Hybrid apps are those apps that have all access of native perform functionality and or you can say it is small websites running in browser shell in the application. It is a powerful HTML5 SDK that helps peoples to build mobile apps using HTML, CSS, and JavaScript. Ionic framework mainly focus on the look and feel of the app and its UI interaction. Ionic very fits well with the front end part of your app. It is free to use under MIT license so that it can be used for personal or commercial applications/projects.


2. What are the advantages and disadvantages of building hybrid/mobile applications using the Ionic framework?
The most obvious advantages are:
1. The ionic framework builds hybrid applications using web technologies. It means web developers can very easily build mobile applications too. Also, because it uses JavaScript / angular, almost the same codebase can be used to build both iOS and Android applications.
2. Development cost is less compared to native iOS and Android applications.
3. The ionic framework is excellent for quick application ideas prototyping.
Some of the disadvantages are:
4. It is not suited for high-end graphics dependent applications or games.
5. Performances are not as good as native applications, namely animations, scrolling, and network operations.
6. As mentioned, JavaScript animations are not as performant as native animations. However, there are JavaScript / angular libraries, like chartjs, which provide decent graph UI performance on the devices.


3. Explain what is the difference between "ionic build and ionic prepare” commands?
ionic prepare copies all files from the www folder into the target platform’s www folder.
ionic build also does this but also builds the app’s source code so that it can be run on a simulator/emulator or a device.


4. Explain some of Useful Ionic Commands. 
Please check commands and its description -
1. start-  This command is used to create a new project.
2. serve- This command is used to start a local dev server for app dev/testing.
3. generate-  This command is used to generate pipes, components, pages, directives, providers, and tabs.
4. docs - This command is used to open the Ionic documentation website.
5. build - This command is used to build web assets and prepare your app for any platform targets.
6. link- This command is used to connect your local app to Ionic.
7. info - This command is used to print system/environment info.
8. login- This command is used to log in with your Ionic ID.
9. signup - This command is used to create an Ionic account.
10. upload- This command is used to upload a new snapshot of your app.
11. telemetry-  This command is used to opt in and out of telemetry.
12. config set- This command is used to set config values.
13. config get- This command is used to print config values.
14. cordova compile- This command is used to compile native platform code.
15. cordova build- This command is used to build an Ionic project for a given platform.
16. cordova emulate- This command is used to emulate an Ionic project on a simulator or emulator.
17. cordova plugin - This command is used to manage Cordova plugins.
18. cordova platform- This command is used to manage Cordova platform targets.
19. cordova resources - This command is used to automatically create icon and splash screen resources.
20. cordova prepare - This command is used to copies assets to Cordova platforms, preparing them for native builds.
21. package download- This command is used to download your packaged app.
22. package build- This command is used to start a package build.
23. package list - This command is used to list your cloud builds.
24. cordova run - This command is used to run an Ionic project on a connected device.
25. package info - This command is used to get info about a build.


5. How to use service/providers in Ionic?
Services play a very important role in Ionic as you already know they provide information to our application and perform various tasks for us. SimpleAlert, data, ConnectivityMonitor, GoogleMaps, etc. are some of the services which are built in ionic framework. There are a few points which are to be kept in mind while creating a service. Adding a provider to it, Importing a service and injecting it is the most important thing. The services should be imported into the classes where they are going to be used. When it is injected inside a constructor, a new member variable is created which can be accessed from anywhere within the class. A provider can be added in a service by two ways - Either it can be added to an individual component, or it can be added globally to the application when bootstrapping the root component.


6. Explain the difference between PhoneGap, Cordova, and Ionic?
PhoneGap is a library that exposes native mobile phone functionalities as JavaScript API. When Adobe purchased PhoneGap, its open source core was donated to the Apache Software Foundation under the name Cordova. In the beginning, there was almost no difference between Cordova and PhoneGap. Although, over the years of development, Adobe started adding a proprietary set of the services to PhoneGap. Today, it is safe to say PhoneGap is Cordova plus extra Adobe services. Ionic uses Cordova, not PhoneGap for its core tools. Beside native mobile phone functionalities, Ionic gives structure and code scalability to JavaScript applications by using AngularJS. It also provides a set of Angular directives and components to speed up application development.


7. How to use observables in an Ionic framework?
Observables are something that is not specific to Ionic or Angular. It is provided by the RxJS library. Observables are almost similar to the promises but can do a lot more. It can deal with multiple values at a time rather than just resolving one value. You can even subscribe to an observable to manipulate the data which is associated with it. Observables are considered to be “lazy”, i.e. they won’t get executed until and unless they are subscribed to. Various operations can be applied to the observables for modifying it and returning a new one. You can even create your own observable. The observable patterns are combined into one with the help of the subject which is preferred for simple implementations.


8. What is Ionic Market?
The ionic market provides ready starter, plugins, themes etc. for the developer to download them and use for their own projects.


9. How do you persist data between application launches using the Ionic framework?
As Ionic behind the scene builds HTML5 based applications, you can use localStorage and sessionStorage API to persist data on the mobile phone. However, since localStorage can only store strings, objects need to be stringified before saving. Also, it is important to mention localStorage has size limit around 5MB.


10. How do you pass data from one view to another in Ionic applications?
You can use the NavController and NavParams to send data to pages that you push


11. Give some examples of hybrid mobile app frameworks?
re are several frameworks are available for hybrid mobile app development.

Mobile Angular UI
Intel XDX
PhoneGap
Ionic
Appcelerator Titanium
Kendo UI


12. How can you render a 5000 item list in Ionic, without affecting scroll performance?
Ionic provides a collection-repeat directive that renders only visible items in the DOM. So even if the list is huge, like 5000 in our example, only items visible in a viewport are rendered. Thus, scroll performance is not affected.


13. How To Generating New Pipes, Tabs, Components and Pages using Ionic 3 and Angular 4?
Ionic 3 CLI Commands For Angular 4 Projects
1.     Pipes,
2.     Providers and
3.     Directives,
4.     Components,
5.     Tabs

Syntax –
-        ionic generate [pipes] [pipes-name]
-        ionic generate [providers] [providers-name]
-        ionic generate [directives] [directives-name]
-        ionic generate [components] [components-name]
-        ionic generate [tabs] [tabs-name]

Example –
-        ionic generate pipe
-        ionic generate provider
-        ionic generate directive
-        ionic generate component
-        ionic generate tabs
-        ionic generate page

-        ionic generate component demoApp
-        ionic generate page Login
-        ionic generate page register --no-module
-        ionic generate page users --constants
-        ionic generate pipe MyCustomPipe


14. What is the advantage of caching the views in Ionic apps? Provide examples.
Ionic by default caches up to ten views, which improves performance and also maintains different states in the views at the same time. For example - The cache can maintain scroll position in the views or active state of buttons.


15. What is the difference between native mobile app design and responsive web design? Do we really need both? Explain.
Mobile apps can be developed natively or as hybrid apps, while mobile-friendly websites can be developed as adaptive or responsive. The basic design process behind all of them is more or less the same. The only thing we need to consider when designing for mobile is that we have a specific set of rules we need to follow. Apple has its own, and so does Google.
When you’re designing for iOS or Android, the underlying process is the same. First, we do research that will outline best practices and show us what we can do on a certain platform and what not. Basically, research helps us we learn restrictions and take advantage of possibilities a given field.
Designers are likely to work on both native app and responsive web designs. Native apps are important because we want the user to have them on their dashboard, and this way we want to help users in their everyday activities. Some native apps can work offline while others can’t.
Responsive web design is important for SEO and Google indexing. So, if we want to have your project well-ranked on Google, you definitely go for a mobile-friendly responsive design.


Monday, October 15, 2018

iPhone XR / XS / XS Max CSS media queries



Handling the Notch on iPhone X / XR / XS / XS Max OR iPhone media queries for responsive design  -

Media queries are very useful to modify your website or hybrid apps depending on a device resolution/type. This is very important to manage resolution in different devices. It help us to present batter view of app/website to users. Below are the examples for iPhone XR / XS / XS Max CSS media queries -


/* Apple iPhone XR 1792x828px at 326ppi Media Queries */
@media only screen 
    and (device-width : 414px) 
    and (device-height : 896px) 
    and (-webkit-device-pixel-ratio : 2) { }

/* Apple iPhone XS 2436x1125px at 458ppi Media Queries */
@media only screen 
    and (device-width : 375px) 
    and (device-height : 812px) 
    and (-webkit-device-pixel-ratio : 3) { }

/* Apple iPhone XS Max 2688x1242px at 458ppi Media Queries */
@media only screen 
    and (device-width : 414px) 
    and (device-height : 896px) 
    and (-webkit-device-pixel-ratio : 3) { }


Below are the examples for iPhone X / 8 / 8 Plus CSS media queries -

/* Apple iPhone X Media Queries */
@media only screen 
    and (device-width : 375px) 
    and (device-height : 812px) 
    and (-webkit-device-pixel-ratio : 3) { }

/* Apple iPhone 8 Media Queries */
@media only screen 
    and (device-width : 375px) 
    and (device-height : 667px) 
    and (-webkit-device-pixel-ratio : 2) { }

/* Apple iPhone 8 Plus Media Queries */
@media only screen 
    and (device-width : 414px) 
    and (device-height : 736px) 
    and (-webkit-device-pixel-ratio : 3) { }



Note : If you are looking for a specific orientation. Follow below rules -

For portrait orientation add below rule :

    and (orientation : portrait) 


For landscape orientation add below rule :

    and (orientation : landscape) 



Now use above media query in your project. It helps me a lot. If you have any query please post in a comment. 

For other all Media Queries please check this link - https://allexperts16.blogspot.com/2018/06/media-queries-for-standard-devices.html

It has Media Queries for - iPads, iPad 3, iPhone 4, iPhone 5, iPhone 6, iPhone 6+, Samsung Galaxy S3, Samsung Galaxy S4, Samsung Galaxy S5, and many more. 


Wednesday, October 10, 2018

How to remove white space from iPhone X in ionic / Cordova

Hey all,

Please check below image in this you can find this issue -




Finally, I found the solution to this problem. It saves a lot of time. Now UI is proper of my app. Please run below command in your project -

First uninstall "statusbar" old version plugin by using this command -
ionic cordova plugin rm cordova-plugin-statusbar

Now add the new version of this plugin by using this command -
$ ionic cordova plugin add cordova-plugin-statusbar
$ npm install --save @ionic-native/status-bar


Basically, what we did, We just removed the plugin and added new updated plugin of "Status Bar". This solves my problem. Please check this image -







Steps for ionic soluion :

ionic cordova plugin rm cordova-plugin-statusbar
$ ionic cordova plugin add cordova-plugin-statusbar
$ npm install --save @ionic-native/status-bar


Steps for Cordova solution :

cordova plugin rm cordova-plugin-statusbar
cordova plugin add https://github.com/apache/cordova-plugin-statusbar.git