ページ

2012年1月31日火曜日

Titanium studio 開発メモ FaceBook apiからのデータ取得から、スクリプト分割、コンテキスト間の値の受け渡しまで



◎FaceBook連携
注意点
permissionに設定する内容で取得できるデータが変わります。基本的に、publish_streamで取得するとほとんどのデータが取れます。
どの設定でどんなデータが取れるかは以下のサイトで確認できます。
https://developers.facebook.com/tools/explorer
基本的に、FacebookはJSON形式なので、JSON形式に乗っとったデータのアクセスの仕方をしないとダメです。
上のURLのJSONファイルをぐっと睨んで、コードに落とし込みます。
Ti.Facebook.appid = '**************';

Ti.Facebook.permissions = ['publish_stream','user_photos'];

var button = Titanium.Facebook.createLoginButton({

});

win.add(button);

//個人情報を取得するボタンの作成

var getButton = Ti.UI.createButton({

     title: 'GET',

     top: 230,

     left: 110,

     height: 45,

     width: 100,

     textAlign:'center'

});

win.add(getButton);
◎FaceBook apiから個人情報を取得
//個人ID,氏名、地域、最終学歴、現在の勤務先を取得する

getButton.addEventListener('click', function () {

Ti.Facebook.requestWithGraphPath('me',{},"GET",function(e) {

      if(e.success) {

        var obj = JSON.parse(e.result);

        var personal  = {};

        personal.id = obj.id;

        personal.name = obj.name;

        personal.gender = obj.gender;

        personal.location = obj.location;

        var educationFinal = obj.education.length-1;

        personal.education = obj.education[educationFinal].school.name;

        var workFinal = obj.work.length-1;

        personal.work = obj.work[workFinal].employer.name;
◎スクリプトファイルの分割
app.jsにコード打ち続けていると、どんどん大きくなって、見通しが悪いソースファイルになってしまうので、ソース分割の方法を紹介します。
例:スクリプトファイル[app.js]を[win1.js]に分割
[app.js]
var win1 = Ti.UI.createWindow({

title:'hogehoge',

  url: '?????.js',//分割先スクリプトファイルのパス

  backgroundColor:'#fff'

 });

var tab1 = Ti.UI.createTab({

window:win1

});

win1.open();
[win1.js]
var win = Ti.UI.createWindow;
◎コンテキスト間のデータの受け渡し
スクリプトファイルを分割しただけでは、ダメです。分割したファイル同士での変数の受け渡しを行うコード(コンテキスト間の値の受け渡し)を書かなければなりません。しかも、
1.上位コンテキスト(app.js)⇒下位コンテキスト(???.js)のデータの渡し方と
2.下位コンテキスト⇒上位コンテキストでデータの渡し方が違います。
新しい、渡す側で作成した渡す先のwindowオブジェクトのプロパティに渡したい変数を設定する必要があります。
1.上位⇒下位の場合
[app.js(渡す側)]
var personalWindow = Ti.UI.createWindow({
     url: 'person_view.js',
     record: personal,
     func: 'insert_row',
     fullscreen: true,
     backgroundColor:'#fff'
     });
personalWindow.personalId = personal.id;
personalWindow.personalName = personal.name;
personalWindow.personalGender = personal.gender;
personalWindow.personaLocation = personal.location;
personalWindow.personalEducation = personal.education;
personalWindow.personalWork = personal.work;
[???.js (変数を渡される側)]
var win = Ti.UI.currentWindow;
//alert文でプロパティ(渡したい変数)が受け渡されているか確認
alert(Ti.UI.currentWindow.personalWork);
2.下位⇒上位の場合
ユーザが任意に定義して発生させられるカスタムイベントを経由して、メッセージとして受け渡します。
[app.js]
var hoge = true;
var window = Ti.UI.createWindow({
 url:'????.js'
});
window.open();
//customという名前のカスタムイベントを受け取り処理する
Ti.App.addEventListener('custom',function(e){
Ti.API.info(e.message);
Ti.API.info(e.profile.name);
});
[???.js]
Ti.App.fireEvent('custom',{
message:'イベントメッセージ',
profile:{
  name:'ネストしたデータも引き渡せる',
  memo1:'functionなどは渡せない',
  memo2:'子Windowのコントロールを外部から操作不可'
}
})
◎DB(SQLite)
今度書きます〜〜。

0 件のコメント:

コメントを投稿