ケータイの端末ID・ユーザIDの取得についてまとめてみました
    このエントリをはてなブックマークに登録

2008/9/8 月曜日 matsui Posted in au, DoCoMo, PHP, SoftBank 12 Comments »

ケータイサイトでは、端末ID・ユーザIDを取得する、という処理をよく行うことがあります。
ログインの度に、ユーザ名とパスワードを入力するというのは、ケータイの操作性の面からも現実的ではないためです。

今回はそんな各種IDの取得方法について、PHPを使った場合を例にとりまとめてみました。

※ここでは端末IDを「ケータイに振られた個体識別情報(製造番号など)」、ユーザIDを「契約に紐付くID」として解説しています。

 

ドコモ端末での取得方法

1. utnを使う

ドコモ端末ではutn属性を使うことによって、フォームやリンクから個体識別情報を取得することができます。
対応機種は、iモード対応HTML 3.0以降の機種(但しSO210i,SH251i,SH251iSを除く)で、現在使われているほとんどの端末に対応していると言ってよいでしょう。

<form action="sample.php" method="post" utn>
<input type="submit" name="submit">
</form>
<a href="sample.php" utn>

utnを使う場合、ケータイ端末側では、「携帯電話情報を送信しますか?」といった確認のダイアログが表示されます。


utn使用時に表示されるダイアログ

送信された端末IDは、ユーザエージェントから取得できます。

$agent = $_SERVER['HTTP_USER_AGENT'];

取得できるフォーマットの例は次の通りです。

FOMA

DoCoMo/2.0 P902i(c100;TB;W24H12;serXXXXXXXXXXXXXXX;iccxxxxxxxxxxxxxxxxxxxx)

・FOMA端末製造番号フォーマット
 → serXXXXXXXXXXXXXXX (ser + 15桁の英数字)
・FOMAカード個体識別子
 → iccxxxxxxxxxxxxxxxxxxxx (icc + 20桁の英数字)

mova

DoCoMo/1.0/P504i/c10/TB/ser***********

・製造番号
 → ser*********** (ser + 11桁の英数字)

FOMA端末製造番号と製造番号は、ケータイ端末にふられた(機種変更で変わる)番号であることに注意してください。

参考:
→ NTT docomo iモード対応HTMLタグ一覧 utn属性 [nttdocomo.co.jp]

 

2. iモードIDを使う

iモードIDは2008年3月31日から提供された、ドコモの新しいユーザ識別方法です。
契約ユーザごとに一意となる番号のため、機種変更があってもiモードIDは変わりません。
全てのiモード端末で利用でき、utnのように確認用のダイアログがでないことも特徴です。

URLに「guid=ON」というパラメータを付けると、拡張ヘッダにiモードIDが付く、という仕様です。
サーバ側からは次のように取得できます。

$imode_id = $_SERVER['HTTP_X_DCMGUID'];

ただし、この機能を利用するには、次のメニューから利用者が通知を許可している必要があります。(デフォルトは通知するとなっています)
iモードメニュー → お客様サポート → 各種設定 → iモードID通知設定

また仕様上、SSL通信時は利用できないことに注意してください。

参考:
→ ke-tai.org 本日提供が開始された「iモードID」機能を早速試してみました [ke-tai.org]
→ NTT docomo iモードセンタの各種情報 iモードIDについて [nttdocomo.co.jp]

 

他にも公式サイトで使われるNULLGWDOCOMO [itpro.nikkeibp.co.jp]方式もありますが、禁則事項に触れるのであまり詳しくは書けません。
公式サイト以外のいわゆる勝手サイトからは利用できないため、一般の開発者にはあまり関係がないでしょう。

 

au端末での取得方法

EZwebの場合はごくシンプルで、EZ番号(旧称サブスクライバID)を利用します。
こちらは契約ごとに振られる番号のため、機種変更があっても変わりません。
取得方法は次の通りです。

$ez_no = $_SERVER['HTTP_X_UP_SUBNO'];

EZ番号の形式:
01234567890123_xx.ezweb.ne.jp
([14桁の数値]_[2桁の英字].ezweb.ne.jp)

こちらもユーザ側で通知設定の可否を設定することができます。
au oneトップ → auお客様サポート → 申し込む/変更する → EZ番号通知設定

参考:
→ au EZfactory ユーザエージェント [au.kddi.com]

 

ソフトバンク端末での取得方法

1. 端末のシリアルを使う

ソフトバンク端末は、ユーザエージェントに端末ID(シリアル)が付加されています。
ただし、端末側のブラウザ設定メニュー(ソフトバンクのサイト内ではないことに注意)で、製造番号通知のON/OFFを切り替えることができます。
このIDは端末に振られた番号のため、機種変更に伴い変更になります。

例:

SoftBank/1.0/824T/TJ001/SNxxxxxxxxxxxxxxx Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1

形式:
SN012345678901234 (SN + 15桁の数字)

 

2. x-jphone-uidを使う

P型以降の端末では「x-jphone-uid」を使ってユーザIDを取得できます。
こちらは契約ごとのIDのため、機種変更があっても変わりません。

$uid = $_SERVER['HTTP_X_JPHONE_UID'];

形式:
16桁の英数字(大文字・小文字混在)

こちらは、ソフトバンクのメニューからID通知の可否を設定できます。
メニューリスト → MySoftBank → 各種変更手続き → ユーザID通知設定

参考:
→ ソフトバンク Mobile Creation ユーザエージェント一覧 [creation.mb.softbank.jp]

※追記
SSL利用時には上記IDが取得できないケースがあるようです。
詳しくはコメント欄をご覧ください。

 

 

なお、端末IDを利用したログインでは、端末が中古として流通し持ち主が変わった場合でも、ログインできてしまうという問題がありますので、注意が必要になります。

また、PCからアクセスできる環境では、IDの詐称もごく簡単に行えます。
IPアドレスから接続元を検証するなどの対応が必要になることにご注意ください。

 

この辺りのID取得処理は、「PEAR::Net_UserAgent_Mobile」などのライブラリを使うことで、より簡単に実装可能です。

すっかり長文になってしまったので、サンプルプログラムなどはまた後日掲載したいと思います。

※続きの記事を書きました → こちら

 

関連:



CakePHPで3キャリア対応の絵文字を表示するためのコンポーネント
    このエントリをはてなブックマークに登録

2008/7/17 木曜日 matsui Posted in PHP, 記事紹介・リンク No Comments »

PHP用のフレームワークCakePHPで、ケータイ3キャリア対応の絵文字を表示するためのコンポーネントが公開されています。

→ Webプログラマー+WebデザイナーなZARU日記 CakePHPで3キャリア携帯の絵文字を表示する [tofu-kun.org]

 

一番種類の少ないドコモを基準とした絵文字データをDB内に持ち、他キャリア用に変換して出力する形式のようです。

仕様としては次のようになっているとのことです。(上記ブログより引用)

  • DoCoMo / au / Softbank 3キャリア対応 252絵文字
  • PCからのアクセスの場合は、DoCoMoの絵文字を画像化して表示
  • 端末の振り分けはUser-Agent

 

表示側は簡単で、

echo $emoji['1'];
echo $emoji['15'];

のように書くだけで、各キャリアに合わせた絵文字が表示されます。

CakePHPを使ってケータイサイトを作成する際には役立ちそうですね。

 

なお、CakePHPを使って携帯サイトを作成する場合には、次の書籍が参考になると思います。


CakePHPガイドブック

「携帯電話向けシステムの作成」という章が設けられており、ケータイ向けURLルーティング、文字コードの変換処理、セッション用文字列の維持、IPアドレスによるアクセス制限などについて解説されています。

 

関連:



各キャリアの画像保存・転送制限の設定方法をまとめてみました
    このエントリをはてなブックマークに登録

2008/6/30 月曜日 matsui Posted in PHP, 全キャリア対応 4 Comments »

今回は各キャリア・各フォーマット毎に、転送制限画像の作り方をまとめてみました。

ケータイでは、待ち受け画像などで使うために、ダウンロードした画像を再配布させないための、保存制限や転送制限を行うことができます。
転送制限をかけた画像は、メールへの添付や、SDカードへの保存が行えなくなります。
保存制限をかけた場合は、保存すらできません。

Windows用のフリーウェアなどには、転送制限を行わせないための情報を埋め込むソフトがあったりするのですが、CMSの管理画面からのアップロードや、メール添付による画像アップロードなど、サーバ上で動的に画像を生成しなければならないケースも多いと思いますので、PHPを使ったサンプル(とは言ってもコマンドを叩いているだけですが)でまとめてみることにします。

 

まず、概要を表にまとめると次の通りです。

キャリア
転送禁止
[jpg]
転送禁止
[gif]
転送禁止
[png]
保存禁止
[共通]
ドコモ コメント追加 *1 コメント追加 *1 そもそも表示不可 保存禁止は不可能
au コメント追加 *1 コメント追加 *1 コメント追加 *2 imgタグに属性追加 *3
SoftBank ヘッダ出力 *4 ヘッダ出力 *4 ヘッダ出力 *4 ヘッダ出力 *5

 

*1 : ドコモ、auのjpg, gifを転送禁止にする方法

画像のヘッダ部分にコメントを入れます。
ドコモであれば「copy=”NO”‘」、auであれば「kddi_copyright=on」を入れてあげればOKです。
両対応にする場合は、カンマで続けて書けば大丈夫ですが、auは先頭に文字列がある必要がありますので、こちらを先に書き、「kddi_copyright=on,copy=”NO”」のようにします。

PHPから処理する場合は次の通りです。
※ImageMagickのコマンド「mogrify」がインストールされている必要があります。

$cmd = "mogrify -comment 'kddi_copyright=on,copy=\"NO\"' test.jpg";
$res = system($cmd);

 

*2 : auのPNG画像を転送禁止にする方法

auのPNGを転送禁止にするには、画像のCopyrightキーワードの部分に「kddi_copyright=on」を埋め込んでやればOKとのことです。

ImageMagickを使った方法が良くわからなかったため、次のソフトを使いました。
(※方法をご存じの方教えてください)

こちらの記事の下段の方に「imgcmt」というソフトが公開されています。
→ MODULE.JP imgcmt version 1.0.0 [module.jp]

次のようにコマンドを実行することで、うまくいきました。
PHPのsystem関数でも同様で行けると思います。

imgcmtpng Copyright kddi_copyright=on < test.png > test.png

 

*3 : auで画像を保存禁止にする方法

こちらは簡単です。imgタグにcopyright=yesという属性を付けてやればOKです。

<img src="test.png" copyright="yes" />

 

*4 : ソフトバンクで画像の転送を禁止する方法

.htaccessに次のように記載します。
(Apacheの「mod_headers」モジュールがインストールされている必要があります)

<FilesMatch "\.(jpg|gif|png)$">
  Header append x-jphone-copyright no-transfer
  Header append x-jphone-copyright no-peripheral
</FilesMatch>

もうあまりアクセスは無いとは思いますが、J-Phone時代のC型端末の場合は、上記設定では対応できません。
C型端末に対応する場合は、画像の拡張子を変更することで転送を防ぐことができます。(「jpg → jpz」、「png → pnz」)

 

*5 : ソフトバンクで画像の保存を禁止する方法

同じく.htaccessに次のように記載します。

<FilesMatch "\.(jpg|gif|png)$">
  Header set x-jphone-copyright no-store
  Header append x-jphone-copyright no-transfer
  Header append x-jphone-copyright no-peripheral
</FilesMatch>

※公式サイトのPDF資料に、一部の端末ではno-storeが利用できないとありましたので、念のため3つを併記しました。

 

今回はImageMagickのコマンドを、system関数から叩くという方法を取っています。
他にも「MagickWand For PHP」を使った方法もあり、その例はウノウラボさんのブログに情報がありましたので、こちらを参照すると良いと思います。

→ ウノウラボ 携帯キャリアで画像を転送させない方法 [unoh.net]

 

上記ブログにもありますが、せっかく対策を行ってもケータイ以外からアクセスされては意味がありません。
IPアドレスによる制限をかけ、PCやWillcom、イーモバイルなどからのアクセスも遮断しましょう。

なお、これらの情報はまだ勉強中の段階のため、誤り等がありましたら、突っ込みをお願いいたします。

 

関連:



第33回PHP勉強会で使用したスライド資料「モバイル版Googleマップのちょっと進んだ使い方」
    このエントリをはてなブックマークに登録

2008/5/26 月曜日 matsui Posted in PHP 1 Comment »

先日の「第33回PHP勉強会」に参加させていただいたのですが、その際の発表で使用したスライド資料を公開いたします。

なお、資料内で紹介しているサンプルはこちらからご覧になれます。

それぞれプログラムもあるのですが、出張の移動中に書いたのでソースがあまりキレイではないのと、ライブラリとして使えるように、現在リファクタリング中です。
近日中に公開する予定ですので、もう少々お待ちください。

なお、勉強会参加者のtwkさんが、早速ウィザードの日本語訳のページを作ってしまったそうです。
→ こちらです
GoogleStaticMapsAPIに慣れていない方にはとても便利だと思います。
ぜひ合わせてご利用されると良いのではないでしょうか。

 

関連:



絵文字ライブラリ「sfPictogramMobilePlugin」がバージョンアップし、PEARパッケージ化されたようです
    このエントリをはてなブックマークに登録

2008/5/2 金曜日 matsui Posted in PHP, ソフト紹介 No Comments »

以前にご紹介した、symfony用の絵文字プラグイン「sfPictogramMobilePlugin」がバージョンアップされ、同時にPEARパッケージ化されたようです。

→ アシアルブログ 絵文字ライブラリをPEARパッケージ化&sfPictogramMobilePluginをバージョンアップしました。 [asial.co.jp]

 

上記ブログからダウンロードするか、下記のようにして直接インストールができます。

PEARのインストール

$ pear install http://blog.asial.co.jp/data/Text_Pictogram_Mobile-0.0.2.tgz

symfonyプラグインのインストール

$ symfony plugin-install http://blog.asial.co.jp/data/sfPictogramMobilePlugin-0.0.4.tgz

 

なお、今回から追加されたPEARパッケージの場合は、次のようにして利用できるようです。

require_once("Text/Pictogram/Mobile.php");
$picObject = Text_Pictogram_Mobile::factory($carrier, $type);

よくあるPEARパッケージと同じ使い方で大丈夫そうですね。

ただし、symfonyプラグインをベースにしている関係から、動作にはPHP5が必要なようです。
ブログを読む限り、PHP4への対応も検討されているようですので、期待したいですね。

 

関連: