TitaniumMobileでBASIC認証を通すのに、HTTPCientのsetBasicCredentialsという関数が使える、という記述を時々見かけます。guides_network_httpclient – titanium-mobile-doc-jaとか。Titanium Mobileで開発するiPhone/Androidアプリにも載っています。
でもこれ、どうも今使えないっぽい。
var xhr = Titanium.Network.createHTTPClient(); xhr.setBasicCredentials('username', 'password'); xhr.onload = function() { Ti.API.info('xhr.onload'); }; xhr.onerror = function(e) { Ti.API.info('xhr.onerror '+e.error); }; xhr.open("GET","http://example.com/hoge.html"); xhr.send();
setBasicCredentialsが使えるのであれば、上記のようなコードでうまくいくはずなのですけど、1.7.1iPhoneで走らせると、
[ERROR] Script Error = invalid method '(null)' at app.js (line 2).
そんな関数は知らんぜ、と言われます。実際、Titanium.Network.HTTPClientを見ても、そんな名前の関数は存在しません。1.5位まではさかのぼってみたんだけど、その頃からなかったっぽい。
最初っから存在しなかったらWikiに書かれることもないはずなので、たぶん過去のある時点では存在したのだと思います。バージョンが変わったら関数が一個なくなるくらい、TitaniumMobileの利用者は慣れっこですよね?(涙)
なお、setBasicCredentialsが使えない状態でどうやってBASIC認証を通すかについては、Antelope Love Fan — Basic Authentication with Titanium.Network.HTTPClientが参考になりました。
var xhr = Titanium.Network.createHTTPClient(); xhr.onload = function() { Ti.API.info('xhr.onload'); }; xhr.onerror = function(e) { Ti.API.info('xhr.onerror '+e.error); }; xhr.open("GET","http://example.com/hoge.html"); var authstr = 'Basic ' +Titanium.Utils.base64encode(username+':'+password); xhr.setRequestHeader('Authorization', authstr); xhr.send();
openしてからsetRequestHeaderを呼び出すのがポイントです。