본문 바로가기

Dev/Orvercome 3sec memory

Native와 Mobile Web통신 시 반환 메서드명 랜덤 생성

728x90

Android Native와 Mobile Web 사이 API 정의 후 통신 할때, 

Native 반환 메서드명을 시간값과 랜덤 함수를 이용하여 임의로 생성되도록 하고, Map과 같은 형태로 저장하여,

async로 호출하도록 한다.


//** 1. 반환 시 실제 동작할 함수 정의

var project=

{

//** Start Responder

Responder :

{

//** 1-1. Start successRequestList:: 리스트 반환 성공

successRequestList : function(param) {

alert("반환 ======== successRequestList " + param);

jsParingResponseList(param);

}, //** End successRequestList :: 리스트 반환  성공 v1

......................

}

//** Native 함수 호출 요청

function requestList(param) {


var reqData = jsStringIntoJsonObject(param);

// 성공시 반환 파라미터

reqData.success=jsMakeCalbackFunctionName(project.Responder["successRequestList"]);


window.project.requestlist(reqData ); //**  Native 함수 호출

}

var preFunctionName = "callback_";

//** 반환 함수 임의 생성

function jsMakeCalbackFunctionName(func) {

var nowTime = jsGetMilisTime();

var functionName = preFunctionName + (Math.floor(Math.random() * nowTime));

project.Responder.callbacks[functionName] = func;

return 'project.Responder.callbacks["'+functionName+'"]';

}

function jsGetMilisTime(){

var gift=new Date();

return  gift.getTime();

}

var project={
//** Start Responder
Responder :
{
//** Start cllbacks
callbacks :{}
}
};


이렇게 하면,
project.Responder.callbacks 변수에 임의의 Key값으로 project.Responder 함수가 설정되고, Native에서는 넘겨받은 이름으로 함수를 호출하게 된다.

이를 테면,
project.Responder.callbacks 변수에 다음과 같이 Map형태의 값들이 설정 되며, Native 쪽에서는 해당 이름으로 반환 함수를 호출한다.
project={
Responder :
{
callbacks :
{
callback_43374958 :  function(param) {

alert("반환 ======== successRequestList " + param);

jsParingResponseList(param);

} //** End successRequestList :: 리스트 반환  성공 v1

............. (서로 다른 이름으로 같은 함수가 정의 될 수 있음)

}
}
};



Native 호출 없이 테스트 삼아

project.Responder.callbacks Object 에서 key값들을 읽어와서 해당 함수를 다음과 같이 실행해 볼 수 있다. 


$(document.ready(function(){

var arrCallbacks = Object.keys(project.Responder.callbacks);

for(var i=0; i< arrCallbacks.length; i++){

alert(arrCallbacks[i]);

project.Responder.callbacks[arrCallbacks[i]](thisItem);

}

}