Net_UserAgent_MobileにNet_UserAgent_Mobile_UserIDを組み込んでみた
Net_UserAgent_MobileのソースがGitHubで公開されています。
iteman/net-useragent-mobile · GitHub
これをforkして、Net_UserAgent_Mobile_UserIDを組み込んでみました。(Net_UserAgent_Mobile_UserIDについてはこちら→Net_UserAgent_Mobile_UserIDをリリースしました - okonomiの日記)
okonomi/net-useragent-mobile · GitHub
やったこと
Net_UserAgent_Mobileには、getUID()というUID取得メソッドが用意されています。この中身をNet_UserAgent_Mobile_UserIDに丸投げするようにしました。
<?php abstract class Net_UserAgent_Mobile_Common { // 省略 public function getUID() { if (is_null($this->_userid)) { require_once 'Net/UserAgent/Mobile/UserID.php'; $this->_userid = Net_UserAgent_Mobile_UserID::factory($this); } return $this->_userid->getRawData(); } // 省略 }
Net_UserAgent_Mobile_UserIDでキャリアごとの処理を吸収するので、Net_UserAgent_Mobile_Commonの各サブクラスでUID取得処理を個別に書かなくてもよくなりました。
いままでNet_UserAgent_MobileではNULLGWDOCOMOのアレとかが取得できなくて実務では使いたくても使えなかったんですが、Net_UserAgent_Mobile_UserIDはUID判別・取得を独自に追加できるのでそんな問題も解決できるかなーと思います。
<?php /* id=aa-12345みたいな形式を認識するようにする */ require_once 'Net/UserAgent/Mobile/UserID.php'; require_once 'Net/UserAgent/Mobile/UserID/Abstract.php'; require_once 'Net/UserAgent/Mobile.php'; class Hoge extends Net_UserAgent_Mobile_UserID_Abstract { public function getID() { if (array_key_exists('id', $_REQUEST)) { return $_REQUEST['id']; } else { return null; } } public function validateID($id) { return preg_match('/^[a-z}{2}\-[0-9]{5}$/', $id); } protected function _parseID($id) { return array( substr($id, 0, 2), substr($id, 3), ); } } // 独自処理を登録 Net_UserAgent_Mobile_UserID::setUserIDModules('DoCoMo', new Hoge()); $_SERVER['HTTP_USER_AGENT'] = 'DoCoMo/2.0 F05A(c100;TJ)'; $_REQUEST['id'] = 'ab-12345'; $ua =& Net_UserAgent_Mobile::singleton(); $uid = $ua->getUID(); // ab-12345