Skip to content
uupaa edited this page Aug 18, 2015 · 24 revisions

このエントリでは、古いデバイスを断捨離する方法について説明します。

具体的には、あらかじめ古いデバイスのサポートをどうするか(サポートポリシー)を決めた上で、適切に運用するための方法について説明します。

Spec.THRESHOLD

Spec.THRESHOLD はサポートポリシーを数値化したものです。
これらの値を修正すると Spec.dump(), Spec#LOW_END, Spec#OUTMODED の結果が変化します。

// default values
Spec.THRESHOLD.OUTMODED           = 24;  // 24 months was passed.
Spec.THRESHOLD.LOW_END_CPU_CORES  = 2;   // dual core
Spec.THRESHOLD.LOW_END_CPU_SPEED  = 1.2; // 1.2 MHz
Spec.THRESHOLD.LOW_END_GPU_GFLOPS = 19;  // 19 GFLOPS

OUTMODED を 24 に設定しているのは以下の理由からです。

  • 2年縛り文化
    • 24ヶ月ごとに新しいデバイスに乗り換えるユーザが多くいます
  • バッテリー寿命の劣化
    • 500回充電すると容量が60%に減り、1000回充電すると40%に減ります
  • Nexus シリーズのアップデートポリシー
  • 多くのキャリアが、2〜3年経過したデバイスをサポート対象から外しています

快適にゲームをプレイできない端末を断捨離する

ゲーム用のセッティング例です。

Spec.THRESHOLD.OUTMODED           = 24;  // 発売から24ヶ月(+6ヶ月)以上経過したデバイスはサポートしたくない
Spec.THRESHOLD.LOW_END_CPU_CORES  = 2;   // デュアルコアCPU 以下で...
Spec.THRESHOLD.LOW_END_CPU_SPEED  = 1.5; // 1.5 GHz 以下のデバイスはサポートしたくない...
Spec.THRESHOLD.LOW_END_GPU_GFLOPS = 80;  // 80 GFLOPS 以下のヌルヌル動かないデバイスはサポートしたくない

// --- サポートポリシーに基づき端末を判定する ---
var ua = new UserAgent();
var spec = new Spec(ua);

if (spec.LOW_END || spec.OUTMODED) {
  alert("お使いの端末では快適に遊ぶ事ができません");
  location.href = "http://example.com/sorry.html";
}

2012年夏モデルを断捨離する

2012年夏頃に国内で発売された Android 4.0.x なデバイスや、iOS 6.x デバイスを判別する例です。

Spec.THRESHOLD = {
Spec.THRESHOLD.OUTMODED           = 24;  // 24 months was passed.
Spec.THRESHOLD.LOW_END_CPU_CORES  = 2;   // dual core
Spec.THRESHOLD.LOW_END_CPU_SPEED  = 1.2; // 1.2 MHz
Spec.THRESHOLD.LOW_END_GPU_GFLOPS = 19;  // 19 GFLOPS

var ua = new UserAgent();
var spec = new Spec(ua);

if ((ua.OS === "Android" && parseFloat(ua.OS_VERSION) < 4.1) ||
    (ua.OS === "iOS"     && parseFloat(ua.OS_VERSION) < 7.0)) {
  if (spec.LOW_END || spec.OUTMODED) {
    alert("この端末ではご利用になれません");
  }
}

この例では以下のデバイスを断捨離できます。

  • iOS
    • iPhone 3G/3GS/4/4s
    • iPad 1/2/3/mini
    • iPod touch 3/4/5
  • Android
    • Android one
    • Nexus S/one/
    • Galaxy Nexus/S/S II/Tab
    • Xperia PLAY/arc/acro/acro HD/ray

シェアが大きい端末などを特別扱いする場合は、個別に指定してください。

var ua = new UserAgent();
var spec = new Spec(ua);

if (spec.SLOW_CPU || spec.SLOW_GPU) {
  var ready = false;

  if (spec.OS === "iOS") { // iOS デバイスは通す
    ready = true;
  } else if (/^(Xperia|Galaxy)/.test(spec.DEVICE)) { // 大人の事情
    ready = true;
  }

  if (!ready) {
    alert("お使いの端末では快適に遊ぶ事ができません");
  }
}

Clone this wiki locally