라이브 업데이트 서비스

improve this page | report issue

개요

Mobile Foundation의 라이브 업데이트 기능을 사용하여 애플리케이션 사용자에 대한 서로 다른 구성을 간단하게 정의하고 제공할 수 있습니다. 해당 MobileFirst Operations Console에는 구성의 값 및 해당 구성의 구조를 정의하는 데 필요한 컴포넌트가 포함되어 있습니다. 구성을 이용하는 데 필요한 클라이언트 SDK(Android 및 iOS 네이티브 애플리케이션 및 Cordova 애플리케이션에 사용 가능)도 제공됩니다.

참고: 기존 온프레미스 MobileFirst Server가 포함된 라이브 업데이트를 사용하는 데 관한 세부사항은 여기의 문서를 참조하십시오.

공통 유스 케이스

라이브 업데이트는 구성의 정의 및 이용을 지원하여 애플리케이션에 대해 사용자 정의를 쉽게 작성할 수 있도록 합니다. 공통 유스 케이스의 예제는 다음과 같습니다.

  • 릴리스 트레인 및 기능 플립핑

향후 릴리스에서 다음 유스 케이스가 지원됩니다.

  • A/B 테스트
  • 컨텍스트 기반 애플리케이션 사용자 정의(예: 지리적 세그먼트화)

다음으로 이동:

개념

라이브 업데이트 서비스는 다음 기능을 각 애플리케이션에 추가합니다.

  1. 기능 - 기능을 사용하면 구성 가능한 애플리케이션 기능을 정의하고 해당 기본값을 설정할 수 있습니다.
  2. 특성 - 특성을 사용하면 구성 가능한 애플리케이션 특성을 정의하고 해당 기본값을 설정할 수 있습니다.

개발자나 애플리케이션 관리 팀은 다음 사항을 결정해야 합니다.

  • 라이브 업데이트를 사용할 수 있는 기능과 해당 기본 상태 세트.
  • 구성 가능한 문자열 특성과 해당 기본값 세트.

매개변수를 결정하면 라이브 업데이트 섹션을 통해 앱에 기능과 특성을 추가합니다.

  • 기능: 기능은 애플리케이션 기능의 일부 파트가 사용되는지, 또는 사용되지 않는지 여부를 판별합니다. 애플리케이션의 기능을 정의할 때 다음 요소를 제공해야 합니다.
    • ID - 기능의 고유 ID입니다. 문자열이며 편집할 수 없습니다.
    • 이름 - 기능의 구체적인 이름입니다. 문자열이며 편집 가능합니다.
    • 설명 - 기능에 대한 간략한 설명입니다. 문자열이며 편집 가능합니다.
    • 기본값 - 세그먼트 내에서 대체되지 않은 경우 제공되는 기능의 기본값입니다(아래의 세그먼트 참조). 부울이며 편집 가능합니다.
  • 특성: 특성은 애플리케이션을 사용자 정의할 때 사용할 수 있는 키:값 엔티티입니다. 특성을 정의할 때 다음 요소를 제공해야 합니다.
    • ID - 특성의 고유 ID입니다. 문자열이며 편집할 수 없습니다.
    • 이름 - 특성의 구체적인 이름입니다. 문자열이며 편집 가능합니다.
    • 설명 - 특성에 대한 간략한 설명입니다. 문자열이며 편집 가능합니다.
    • 기본값 - 세그먼트 내에서 대체되지 않은 경우 제공되는 특성의 기본값입니다(아래의 세그먼트 참조). 문자열이며 편집 가능합니다.

라이브 업데이트 아키텍처

다음 시스템 컴포넌트가 함께 작동하여 라이브 업데이트 기능을 제공합니다.

아키텍처 개요

  • 라이브 업데이트 서비스: 다음 사항을 제공하는 독립 서비스입니다.
    • 애플리케이션 관리
    • 애플리케이션에 구성 제공
  • 클라이언트 측 SDK: 라이브 업데이트 SDK는 MobileFirst Server의 구성요소(예: 기능 및 특성)를 검색하고 액세스하는 데 사용됩니다.
  • MobileFirst Operations Console: 라이브 업데이트 어댑터 및 설정을 구성하는 데 사용됩니다.

MobileFirst Server에 라이브 업데이트 추가

기본적으로, 라이브 업데이트 서비스는 Mobile Foundation DevKit에 번들로 제공됩니다.

OpenShift Container Platform(OCP) 설치 시 여기의 문서를 따르십시오.

라이브 업데이트 서비스가 실행되면 등록된 각 애플리케이션에 대한 라이브 업데이트 설정 페이지가 표시됩니다.

애플리케이션 보안 구성

라이브 업데이트와 통합을 허용하려면 범위 요소가 필요합니다. 범위 요소가 없으면 서비스에서 클라이언트 애플리케이션의 요청을 거부합니다.

  1. MobileFirst Operations Console을 로드하십시오.
  2. [애플리케이션] → 보안 탭 → 범위 요소 맵핑을 클릭합니다.
  3. 새로 작성을 클릭하고 범위 요소 liveupdate.mobileclient를 입력하십시오.
  4. 추가를 클릭하십시오.

또한 애플리케이션에서 보안 검사를 사용 중인 경우 해당 보안 검사에 범위 요소를 맵핑할 수도 있습니다.

MobileFirst 보안 프레임워크에 대해 자세히 알아보십시오.

범위 맵핑 추가

값을 사용하여 스키마 및 특성 정의

다음 데모를 참조하여 값으로 기능과 특성을 정의합니다.

기능 및 특성 추가

애플리케이션에 라이브 업데이트 SDK 추가

라이브 업데이트 SDK는 MobileFirst Operations Console에 등록된 애플리케이션의 라이브 업데이트 설정 화면에서 이전에 정의된 런타임 구성 기능 및 특성을 조회하는 API를 개발자에게 제공합니다.

Cordova의 경우, SDK 버전 8.0.202003051505 또는 그 이전 버전을 사용합니다.

Android의 경우, SDK 버전 8.0.202003051505를 사용합니다.

iOS의 경우, SDK 버전 8.0.202003051505 또는 그 이전 버전을 사용합니다.

Cordova 플러그인 추가

Cordova 애플리케이션 폴더에서 다음 명령을 실행하십시오.

cordova plugin add cordova-plugin-mfp-liveupdate

iOS SDK 추가

  1. IBMMobileFirstPlatformFoundationLiveUpdate 팟(Pod)을 추가하여 애플리케이션의 Podfile을 편집하십시오.
    예:

    use_frameworks!
    
    target 'your-Xcode-project-target' do
       pod 'IBMMobileFirstPlatformFoundation'
       pod 'IBMMobileFirstPlatformFoundationLiveUpdate'
    end
    
  2. 명령행 창에서 Xcode 프로젝트의 루트 폴더로 이동하여 다음 명령을 실행하십시오.

      pod install
    

Android SDK 추가

  1. Android Studio에서 Android → Gradle 스크립트를 선택한 후 build.gradle(모듈: 앱) 파일을 선택하십시오.
  2. dependencies 내에 ibmmobilefirstplatformfoundationliveupdate를 다음과 같이 추가하십시오.

    dependencies {
         compile group: 'com.ibm.mobile.foundation',
         name: 'ibmmobilefirstplatformfoundation',
         version: '8.0.+',
         ext: 'aar',
         transitive: true
    
         compile group: 'com.ibm.mobile.foundation',
         name: 'ibmmobilefirstplatformfoundationliveupdate',
         version: '8.0.0',
         ext: 'aar',
         transitive: true
    }   
    

라이브 업데이트 SDK 사용

여러 가지 방식으로 라이브 업데이트를 사용할 수 있습니다.

구성 가져오기

구성을 검색하는 로직을 구현하십시오.
property-namefeature-name을 사용자 값으로 대체하십시오.

Cordova

    var input = { };
    LiveUpdateManager.obtainConfiguration({useClientCache :false },function(configuration) {
        // do something with configration (JSON) object, for example,
        // if you defined in the server a feature named 'feature-name':
        // if (configuration.features.feature-name) {
        //   console.log(configuration.properties.property-name);
	// }
    } ,
    function(err) {
        if (err) {
           alert('liveupdate error:'+err);
        }
  });

iOS

LiveUpdateManager.sharedInstance.obtainConfiguration(completionHandler: { (configuration, error) in
  if error == nil {
    print (configuration?.getProperty("property-name"))
    print (configuration?.isFeatureEnabled("feature-name"))
  } else {
    print (error)
  }
})

Android

LiveUpdateManager.getInstance().obtainConfiguration(new ConfigurationListener() {

    @Override
    public void onSuccess(final Configuration configuration) {
        Log.i("LiveUpdateDemo", configuration.getProperty("property-name"));
        Log.i("LiveUpdateDemo", configuration.isFeatureEnabled("feature-name").toString());
    }

    @Override
    public void onFailure(WLFailResponse wlFailResponse) {
        Log.e("LiveUpdateDemo", wlFailResponse.getErrorMsg());
    }
});

라이브 업데이트 구성이 검색된 경우 애플리케이션 로직 및 애플리케이션 플로우는 기능과 특성 상태에 따라 다를 수 있습니다. 예를 들어 오늘이 국경일인 경우 애플리케이션에 새 마케팅 프로모션을 도입하십시오.

고급 주제

캐싱

캐싱은 기본적으로 사용되어 네트워크 대기 시간이 발생하지 않도록 합니다. 즉 업데이트가 즉시 수행되지 않을 수 있습니다.
자주 업데이트해야 하는 경우 캐싱을 사용 안함으로 설정할 수 있습니다.

Cordova

선택적 useClientCache 부울 플래그를 사용하여 클라이언트 측 캐시 제어:

var input = {useClientCache : false };
      LiveUpdateManager.getConfiguration(input,function(configuration) {
              // do something with resulting configuration, for example:
                // console.log(configuration.data.properties.property-name);  
                // console.log(configuration.data.features.feature-name);
        } ,
        function(err) {
              if (err) {
                 alert('liveupdate error:'+err);
                }
});

iOS

LiveUpdateManager.sharedInstance.obtainConfiguration(useCache: false, completionHandler: { (configuration, error) in
  if error == nil {
    print (configuration?.getProperty("property-name"))
    print (configuration?.isFeatureEnabled("feature-name"))
  } else {
    print (error)
  }
})

Android

LiveUpdateManager.getInstance().obtainConfiguration(false, new ConfigurationListener() {

    @Override
    public void onSuccess(final Configuration configuration) {
      Log.i("LiveUpdateSample", configuration.getProperty("property-name"));
      Log.i("LiveUpdateSample", configuration.isFeatureEnabled("feature-name").toString());
    }

    @Override
    public void onFailure(WLFailResponse wlFailResponse) {
        Log.e("LiveUpdateSample", wlFailResponse.getErrorMsg());
    }
});

캐시 만기

expirationPeriod 값은 30분이며 이는 캐싱이 만료될 때까지의 기간입니다.

Inclusive terminology note: The Mobile First Platform team is making changes to support the IBM® initiative to replace racially biased and other discriminatory language in our code and content with more inclusive language. While IBM values the use of inclusive language, terms that are outside of IBM's direct influence are sometimes required for the sake of maintaining user understanding. As other industry leaders join IBM in embracing the use of inclusive language, IBM will continue to update the documentation to reflect those changes.
Last modified on June 29, 2020