きっかけ
最近あまりTitaniumを触っていなかったのですが,某Titaniumおじさんからサンタさんが日本に到着するまでにTitanium AppからGoogleのAPIを叩いてdisplayNameを取得してほしいと言われた(2015/12/24 18:00ごろ)のがきっかけです.
ユーザ情報を取得してくるためのURL
決め打ちで一人のユーザの情報を取得してくるだけならhttps://www.googleapis.com/plus/v1/people/123456789?key=apiKey
のようにユーザIDとGoogle Developers Consoleで作ったAPI keyを書いておけば取得してこれます.
しかし,今回は決め打ちではなくアプリ内でログインしたアカウントの情報を取得してきたかったのでhttps://www.googleapis.com/plus/v1/people/me?access_token=hogehoge
とて,ログインしているアカウントの情報を取得してこれるようにしました.
後者ではなぜかkey=apiKey
がいらないらしいです.後でいらない理由を調べてみようかなと思います.
お借りしたライブラリ
流石にログインAPI叩くところからやり始めるとサンタさんが日本を通り過ぎてしまうと思ったので調べてみたら,GitHubにejci/Google-Auth-for-Titaniumなるライブラリがあったのでありがたく使わせていただきました.
書いたソースコード
そこまでガリガリと書いたわけでもないのですが,とりあえず app/controller/index.js
の中身を載せておきます.
まあ,ほとんどejci/Google-Auth-for-Titaniumのreadmeに書いてあることをそのまま書いただけなんですが...^^;
var GoogleAuth = require('googleAuth');
var googleAuth = new GoogleAuth({
clientId: 'CLIENT-ID', /* Google Developers Consoleで発行されたクライアントIDをここに */
propertyName: 'googleToken',
scope: [
"https://www.googleapis.com/auth/plus.login",
"https://www.googleapis.com/auth/plus.me",
"https://www.googleapis.com/auth/userinfo.profile",
],
});
var url = "https://www.googleapis.com/plus/v1/people/me";
$.button.addEventListener('click', function(){
googleAuth.isAuthorized(function(){
getDisplayName(function(displayName){
alert(displayName);
});
}, function(){
googleAuth.authorize(); /* ログインしていないとこっちの処理が実行される */
});
});
$.index.open();
function getDisplayName(cb){
var xhr = Ti.Network.createHTTPClient({
onload : function(e) {
cb(JSON.parse(this.responseText).displayName);
},
onerror : function(e) {
Ti.API.debug(e);
},
timeout : 5000
});
xhr.open('GET', url + '?access_token=' + googleAuth.getAccessToken());
xhr.send();
}
View側はalloy new
で生成されたindex.xml
の中のLabel
のid
をbutton
に変更しただけなので省略します.
おわりに
なんとかサンタさんが来る前にプログラムは書き終えられました.(2015/12/24 20:00ちょいすぎ)
が,この記事を書いている間にサンタさんは日本を通り過ぎてしまいました.あー悲し.
今回は書いていませんが,コードを書く前に色々と準備が必要です.例えばGoogle Developers Consoleでプロジェクトを新規作成して,iOSのBundle IDを発行したりとかとか...
ただ,そういったのは探せば日本語の記事が結構あるのでそちらを見てもらえればと思います.こちらとかとか.