9
4

9 回答 9

8

对于我的用例,我想要一些东西来区分nativebrowser平台。也就是说,我的应用程序是在浏览器中运行还是在本机移动设备中运行。这是我想出的服务:

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';
    }
  }
}
于 2020-01-28T13:14:44.693 回答
7

目前 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');
             }
      }}
于 2018-11-27T07:58:15.347 回答
5

以下链接可能对您有所帮助:
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;
    }
}
于 2018-08-13T13:05:22.950 回答
4

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.     |
于 2019-01-02T09:39:37.023 回答
1

如果有人还在 ionic4/cordova 上为此苦苦挣扎,我使用

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

只需将其添加到您的 app.modules 中,然后在任何需要查找的地方运行 this.device.platform

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找到

于 2020-04-21T16:45:39.323 回答
1

您使用的逻辑是正确的逻辑。

问题出在 ionic 4 上,它返回了错误的值。

错误已发布在 ionic repo 上: https ://github.com/ionic-team/ionic/issues/15165

与作为 ['android'] 的平台相关的另一个问题也是一个错误,这里也有报道:https ://github.com/ionic-team/ionic/issues/15051

于 2018-08-14T07:16:13.050 回答
0

离子 4 / 电容器

我写了一个这样的服务:

检测-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它会给出trueif 它在deviceelse false

于 2020-02-19T17:34:53.080 回答
0

这样做:首先导入

import {Platform } from 'ionic-angular';

// >> Then init the platform like this:

 private platform: Platform,

     if(this.platform.is('ios')==true){
        //ios PlatForm
        }else{
        //Android PlatForm
     }
于 2022-02-11T12:02:49.540 回答
0

要检测 Web 平台,您应该使用Bowser。我在 ionic 4 中使用它来检测浏览器平台,即它是 safari 还是 chrome。

第 1 步:您需要在项目中安装 bowser

npm install bowser@2.7.0 --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()可以知道当前浏览器的名称。

于 2019-11-19T06:50:43.100 回答