ここでは、
ということがテーマです。人様からお金をいただくようなケータイサイトの構築は念頭に置いていません。金をかけるなり、キャリアの公式サイトと認められるなりすれば、ほかの方法もあると思います。参考程度 & 自己責任でご利用ください。
各キャリア対応のフリーのブラウザエミュレーターを紹介します(Javaのエミュじゃないからね)。この情報を集めるのは結構苦労しました。いろいろなエミュレーターを試した結果、厳選したものです。
環境変数"HTTP_USER_AGENT" も各キャリアに応じたものを吐いてくれてとっても便利です。
■(imode)iモードHTMLシミュレータ
http://www.nttdocomo.co.jp/service/imode/make/content/html/tool2.html
NTT DoCoMo が配布しています。HTTPヘッダーが見れたり、HTMLの文法チェックをしてくれたり、iモードHTMLのバージョンを選択できたりと、必要十分な機能をそなえています。
■(ezweb)Openwave SDK Universal Edition
http://developer.openwave.com/ja/
Openwave Systems 社提供の WAP2.0 対応コンテンツ開発のための統合開発環境。ezweb に関してはこれ以上のものはないでしょう。
■(vodafone live!)919シミュレータ
http://www.919search.com/search/main/simu_edit.html
クイックサーチという会社がフリーで配ってくれてるエミュレーターです。エディタもついてます。(私はどう考えても使わないけど
)
私が手がけましたソフトウェアのアクセスの中心はパソコンからなので新しいユーザーの登録やパスワードの変更はパソコンからのみできるようにしました。ケータイとパソコン両方ともユーザー名、パスワードは共通にします。
ターゲットとする端末の範囲によっては使えます。
はじめに断っておきますが、Basic認証に関して、i-mode以外では公式な情報が見当たりません(私の探し方が悪いだけ?)。以下の情報は、私の経験とネット上をさまよってかき集めた断片的な情報を総合したものです。くれぐれも参考程度でお願いします
i-mode ではF501i,N501i,D501i以外のi-mode対応端末で使えます。(左の3機種はページが切り替わるたびに認証を要求されるらしい、こんな仕様にするぐらいなら搭載しない方が良かったと思うのは私だけ?)。FOMA では P2101V でしか使えないようです。(これで次世代ケータイと言えるのか?)
ezweb ではWAP2.0 対応端末(A5000/C5000/A3000/C3000/A1100シリーズ、要するに数字部分が1100以上の機種)では確実に使えます。それ以外でも、たぶん使えます。
Vodafone live!(J-sky) ではJ-P51,J-K51,J-SH51,J-SH52などの数字部分が51より大きい機種では使えるようです。
Basic認証を使うにしても、認証に失敗した時のエラーページにケータイ用の物を用意しないとユーザーに不快な思いをさせると思います(Authorization Required とかっていきなり言われてもあせる人がいっぱいいると思う)。独自のエラーページを設定できる環境ならばBasic認証も選択肢になると思います。
自分で認証の機構を作るしかありません。
やり方は全ページのa 、form 要素のURLの末尾にIDをつけて、それを使って認証します(たとえば "index.cgi?k87i469" みたいに)。
ただこの方法だとIDが外部に漏れやすいので、ID としてユーザー名やパスワードを使うことはしないで、ログイン時にランダムに生成した文字数字列をIDとして使います。(このIDの有効時間も定めておくと良いと思います。)
セキュリティーを考えるとIDを GET で渡すのではなく POST のほうがよりよいですが、J-sky のステーション非対応端末ではPOSTが使えません。ステーション非対応端末をターゲットとしないならば(実際そんなに数はないはず) POST を使って hidden タイプでIDを持ちまわすのがベストかな?
cookie も使ってみたい所ですが、ezweb でしか使えないのでダメです。
とにかく、ターゲットの端末をどうするかによって、作りかたは変わってきます。各キャリアの認証の仕組みを作るヒント Basic認証以外でキャリアごとに使えそうな認証の仕組みを考えます。
ちなみに、先に紹介しました3つのエミュレータは、これら各キャリア特有の ID を出力してくれません!最終テストはやはり実機で、と言う事になります。
パスワードに使える文字の種類の実際上の制限 ケータイではキーボードに比べ文字の入力が煩雑であることと、パスワード入力フォームの仕様によりパスワードに使える文字種に事実上の制限が起きます。
特にi-modeではパスワード入力フォーム(Basic認証時のパスワード入力フォームとinput要素の type="password")では文字の入力最中でも完全に伏字になるため、実際上パスワードには数字しか使えません。数字以外を使いたい場合には、Basic認証は使わない、passwordタイプを使わずにtextタイプで済ます、などの対応が必要です。
J-sky、ezweb では文字の入力最中には伏字になりませんので、英字記号も使用できます。しかし、いずれにしても文字入力の煩雑さ、という根本的な制約があるため、長く文字種の多いパスワードの入力はユーザーに負担になります。パソコンからのアクセス時と同じパスワードを使いまわす場合には考慮が必要です。実は、Basic認証であるならば、この問題を回避するちょっとした技があります。(どうもこの技はケータイのブラウザでは使えないかもしれません。F671iS では使えませんでした。)
Basic認証では「http://ユーザー名:パスワード@ホスト名/」とURIのなかにユーザー名、パスワードを埋め込めば、認証過程を省けます(手で入力する必要がない)。セキュリティ上、好ましくないのでカット
そこで、例えば、ユーザー登録の際に、このユーザー名、パスワードを埋め込んだURIを通知し、それを保存しておいてもらえば、認証時の煩雑さは避けられます。この方法は、セキュリティーの問題も結構あるので、リスクとメリットを良く天秤にかけた上で使ってくださいね。
通常では、クッキー対応していないためセッションは引き連れることができません。したがって、URLにセッションIDを記述する方法しかありません。PHPならば use_track_sid を 1 にすることにより、自動判別がかかります。ただし、この方法だとセキュリティリスクが高くなります。
また、各キャリアは同じアドレス範囲しかないので、そのアドレスに絞ってセキュリティを高めておくのも1つの手段です。
その他、全キャリア対応ページを作る上で、注意する点を並べておきます。
各キャリア毎に言語の仕様が違って、これが全キャリア対応のページを作成する上での大きな障害になっています。しかし ezweb が WAP2.0 に準拠したことで全キャリアとも一つのページだけで対応できる道が開けました。そうはいっても、以下のように細部の互換性は全くなく、大変ですが・・・。
i-mode では全機種対応とすれば5kバイトとなります。大まかに言って、210,503以降は10kバイトまでOKです。重要な注意点ですが、画像などのhtml以外の物もすべて含んでこの容量です。
J-skyでは「画像・テキスト込みで、パケット対応機(5xシリーズ)では12キロバイト、それ以外の機種では6キロバイトです。」
ezwebでは「XHTMLで記述するコンテンツは 9KB 程度以内で制作しなければなりません。また、HDMLで記述するコンテンツは、HDMLブラウザ端末の制限値(1デッキあたり、モノクロ端末:約1.2KB/カラー端末:約7.5KB)以内に収まるようにしてください。※ページ中に表示される画像データなどは上記サイズに含まれません。」とのことです。(綺麗にまとまっていたので、公式サイトからそのまま引用)以上を考えると、文字中心のサイトならば、端末ごとの振り分けはせずに、画像も含め「5kバイト」で作ればいいと思います。ケータイで5k分の文字を読むのは大変なぐらいです。
画像中心の、例えば壁紙を配るようなサイトであれば、端末ごとに振り分けないとダメでしょうね。対応する画像フォーマットも違うし、画面の大きさも違うし、大変です。私は、このようなサイトを作る予定が全くないので、これ以上は考えません。皆さん、各々苦しんでくださいませ。
これはズバリ全角8文字が基準です。ページのタイトル部分は、なるべくこの文字数以内に納めるべきです。そのためには半角カタカナや絵文字が役に立ってくれます。
絵文字は各キャリアで互換性がありません。ただし、AUの端末で i-mode のページを読みこむと、サーバーが自動的に近似の絵文字に変換してくれます。実際の変換の規則は、キャリアのページをご覧ください。私の私見ですが、良く使いそうなものに関しては、適切に変換してくれているような気がします。
絵文字だけに関していえば、J-skyだけ別のページを用意するか、cgiを使って変換するか、そもそも絵文字を全く使わないか、の選択が必要です。
i-mode では PHP 作成時にヘッダーに "Content-Type" の他に "Content-Length" を出力することが必須となっています。次のように出力します。
<?php
$html = << "HTML";
<html>
<head><title>ほめぱげのホームページ</title></head>
<body>はろー</body>
</html>
HTML
#文字セットについては全く考慮してません
#Content-Length の出し方だけ
header("Content-Type: text/html");
header("Content-Length: ".length($html));
echo $html;
?>
F671iS で確認したところ"Content-Length"をきちんと認識しているようです。実際のコンテンツの容量より少ない値を出力してみると、途中までしか読み込まれませんでした。多い値の場合には特に問題はありませんでしたが、正確な値を出力すべきでしょう。
ドコモによるとSSL使用時に"Content-Length"のありなしで端末の挙動が異なるようです。
そのほか、テンキーによるリンクのショートカットの指定の仕方、フォームでの入力モードの指定の仕方、などの互換性がありません。これもAUのサーバはi-mode仕様のページならば器用に変換してくれますが、J-PHONE ではしてくれません。
基本的な方向性としては、i-mode を中心に据え、AUの変換機能を最大限に生かしつつ、J-PHONE にどう対応するか?といった感じでしょうか。こう見ていくと「こんなことぐらい仕様を統一してくれよ!」っていいたくなる事がたくさんありますよね。 AirH"PHONE について ついにH"にもブラウザが乗りました。仕様を簡単にまとめておきます。
各キャリアのサイト
3携帯に対応する SSL といえば、むろんベリサインになるのですが、非常に高いのが難点です。最近(2006年以降)の携帯のみということであれば GTE CyberTrust Global Root や Equifax Secure Certificate Authority もあるのですが・・・
#comment