Как определить платформу с помощью Ionic 4

Как определить браузер и мобильную веб-платформу с помощью Ionic 4, потому что, когда я пытался с приведенным ниже кодом в браузере настольного компьютера, он не попадал в состояние 'core'.

if (this.platform.is('core')) {
    alert('core platform');
  } else {
    alert('something else');
  }

Когда у меня есть отладка в инструменте разработчика Chrome, он показывает платформу 'android', как показано ниже.

введите здесь описание изображения

Может ли кто-нибудь помочь мне, как определить платформу в Ionic 4 или что может быть альтернативой для этого?


person Darshana    schedule 13.08.2018    source источник
comment
Можете ли вы опубликовать полный код?   -  person Pradnya Sinalkar    schedule 13.08.2018
comment
@PradnyaSinalkar Я отредактировал свой вопрос.   -  person Darshana    schedule 13.08.2018
comment
Платформа настольного браузера? Можете ли вы привести пример?   -  person Junior Gantin    schedule 13.08.2018
comment
Я пытаюсь спросить, как определить основную платформу ИЛИ браузера с помощью Ionic 4?   -  person Darshana    schedule 13.08.2018


Ответы (8)


Для моего варианта использования я хотел что-то, чтобы различать платформы native и browser. То есть мое приложение работает в браузере или на родном мобильном устройстве. Вот сервис, который я придумал:

import { Injectable } from '@angular/core';
import {Platform} from '@ionic/angular';


type CurrentPlatform = 'browser' | 'native';

@Injectable({
  providedIn: 'root'
})
export class CurrentPlatformService {

  private _currentPlatform: CurrentPlatform;

  constructor(private platform: Platform) {
    this.setCurrentPlatform();
  }

  get currentPlatform() {
    return this._currentPlatform;
  }

  isNative() {
    return this._currentPlatform === 'native';
  }
  isBrowser() {
    return this._currentPlatform === 'browser';
  }

  private setCurrentPlatform() {
    // Are we on mobile platform? Yes if platform is ios or android, but not desktop or mobileweb, no otherwise
    if (
        this.platform.is('ios')
        || this.platform.is('android')
        && !( this.platform.is('desktop') || this.platform.is('mobileweb') ) ) {
      this._currentPlatform = 'mobile';
    } else {
      this._currentPlatform = 'browser';
    }
  }
}
person Leonel Elimpe    schedule 28.01.2020
comment
в чем разница между нативным и браузерным? благодарю вас - person M. Mariscal; 10.09.2020

В настоящее время Ionic 4 поддерживает определение платформы. Следующий код работает для меня.

import { Platform } from '@ionic/angular';
...
constructor(private platform: Platform) {}
...
ngOnInit() {
   this.platform.ready().then(() => {
      if (this.platform.is('android')) {
           console.log('android');
      } else if (this.platform.is('ios')) {
           console.log('ios');
      } else {
           //fallback to browser APIs or
           console.log('The platform is not supported');
             }
      }}
person Duc Quang    schedule 27.11.2018
comment
Как вы его импортировали? - person JohnAndrews; 22.04.2019
comment
Я добавил пример кода, вы можете обратиться к приведенному выше. - person Duc Quang; 19.11.2019

Вам может помочь следующая ссылка:
https://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/16

или вы можете использовать следующий метод:

public isDesktop() {
    let platforms = this.plt.platforms();
    if(platforms[0] == "core" || platforms[0] == "mobileweb") {
        return true;
    } else {
        return false;
    }
}
person Pradnya Sinalkar    schedule 13.08.2018
comment
Спасибо за ответ. Не могли бы вы рассказать мне, как мы можем обнаружить платформу «mobileweb» в Ionic 4? - person Darshana; 13.08.2018
comment
Во время отладки я получил платформу Android в браузере. Я обновил свой вопрос снимком. - person Darshana; 14.08.2018
comment
Вы подключаете устройство Android, а затем выполняете отладку в режиме проверки? - person Pradnya Sinalkar; 14.08.2018
comment
Вы должны указать, что ваш код предназначен для IONIC 3, а предоставленная вами ссылка ведет на IONIC 3+4. - person zhuhang.jasper; 14.03.2019
comment
Как, черт возьми, вы импортируете это в IONIC 4? - person JohnAndrews; 22.04.2019

Значение для платформы Ionic-4

goto- node_modules@ionic\angular\dist\providers\platform.d.ts

     Platform Name   | Description                        |
 * | android         | on a device running Android.       |
 * | cordova         | on a device running Cordova.       |
 * | ios             | on a device running iOS.           |
 * | ipad            | on an iPad device.                 |
 * | iphone          | on an iPhone device.               |
 * | phablet         | on a phablet device.               |
 * | tablet          | on a tablet device.                |
 * | electron        | in Electron on a desktop device.   |
 * | pwa             | as a PWA app.                      |
 * | mobile          | on a mobile device.                |
 * | desktop         | on a desktop device.               |
 * | hybrid          | is a cordova or capacitor app.     |
person Anand Acharya    schedule 02.01.2019

Используемая вами логика является правильной логикой.

Проблема связана с ionic 4, и он возвращает неправильные значения.

Ошибка была опубликована в репозитории ionic: https://github.com/ionic-team/ionic/issues/15165

Другая проблема, связанная с появлением платформы ['android'], также является ошибкой, и о ней также сообщалось здесь: https://github.com/ionic-team/ionic/issues/15051

person ashfaq.p    schedule 14.08.2018

Для определения веб-платформы следует использовать Bowser . Я использовал это в ionic 4 для определения платформы браузера, т. е. будь то сафари или хром.

Шаг 1: Вам необходимо установить Bowser в свой проект.

npm install [email protected] --save-exact

Шаг 2: Затем вам нужно импортировать его на страницу .ts, где вы хотите его использовать. допустим home.ts

import Bowser from "bowser";

Шаг 3: Затем вам нужно написать логин, чтобы проверить платформу браузера внутри функции в home.ts.

checkBrowserPlatform() {
  const browser = Bowser.getParser(window.navigator.userAgent);
  const browserName = browser.getBrowserName();
    console.log(browserName);
  }

Вызвав checkBrowserPlatform(), вы можете узнать имя текущего браузера.

person Tahseen Quraishi    schedule 19.11.2019

Ионный 4 / Конденсатор

Я написал такой сервис:

detect-platform.service.ts

import { Injectable } from '@angular/core';
import { Platform } from '@ionic/angular';
import { find } from 'lodash';

@Injectable({
    providedIn: 'root'
})
export class DetectPlatformService {

    isDevice: boolean = false;

    constructor(
        private platform: Platform, ) { }

    setPlatform(): void {

        const platforms: string[] = this.platform.platforms();
        const platform: string = find(platforms, (p: string) => {
            return p === 'capacitor';
        });

        this.isDevice = platform ? true : false;
    }   

}

Примечание. Поскольку я использую Ionic 4/Capacitor, он дает true, если он находится на device, иначе false.

person Sampath    schedule 19.02.2020

Если кто-то все еще борется с этим на ionic4/cordova, я решил это, используя

import {Device} from '@ionic-native/device/ngx'

Просто добавьте его в свой app.modules и запустите this.device.platform везде, где вам нужно, чтобы узнать, дать представление о выводе в Интернете и apk из этого простого кода.

console.log(this.platform.platforms());
console.log(this.device.platform);

это:

Running on web (desktop and mobile)
["android", "phablet", "cordova", "mobile", "hybrid"]
browser

Running android local (apk)
["android", "cordova", "desktop", "hybrid"]
Android

Теперь я могу правильно использовать плагины для браузера или мобильного устройства, в моем случае это загрузка и обрезка изображения.

Полное объяснение можно найти по адресу https://www.damirscorner.com/blog/posts/20171124-DetectingWhereIonicAppIsRunning.html

person Camilo Casadiego    schedule 21.04.2020