Ionic 4を使用してブラウザとモバイルウェブプラットフォームを検出する方法。デスクトップブラウザで以下のコードを試してみたところ、 'core'条件。
if (this.platform.is('core')) {
alert('core platform');
} else {
alert('something else');
}
chrome開発者ツールでデバッグを行うと、以下のスナップショットのように 'Android'プラットフォームが表示されます。
Ionic 4でプラットフォームを検出する方法、またはこれに代わるものは何でしょうか?
次のリンクが役立つ場合があります。
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;
}
}
私のユースケースでは、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';
}
}
}
あなたが使用するロジックは正しいロジックです。
問題はionic 4にあり、間違った値を返しています。
バグはionic repo: https://github.com/ionic-team/ionic/issues/15165 に投稿されました
['Android']として登場するプラットフォームに関連する他の問題もバグであり、ここでも報告されています: https://github.com/ionic-team/ionic/issues/15051
Webプラットフォームを検出するには、Bowserを使用する必要があります。私はこれをionic 4で、ブラウザプラットフォーム、つまりサファリかクロームかを検出するために使用しました。
ステップ1:プロジェクトにクッパをインストールする必要があります
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()を呼び出すことにより、現在のブラウザ名を知ることができます。
現在、ionic 4はプラットフォーム検出をサポートしています。次のコードは私のために機能します。
this.platform.ready().then(() => {
if (this.platform.is('Android')) {
alert('Android');
} else if (this.platform.is('ios')) {
alert('ios');
} else {
// fallback to browser APIs
}
});
Ionic-4プラットフォーム固有の値
goto-node_modules @ ionic\angular\dist\providers\platform.d.ts
プラットフォーム名|説明|
* | 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. |
イオン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
になります。