アプリが使用する設定値の保存

 

目次


 

概要


概要図は下記の通りとなります。

 

アプリパラメータ値管理方法


 

アプリパラメータ設定のシーケンス


停止中のアプリのパラメータ設定

 

動作中のアプリのパラメータ設定

 

パラメータ値の型


Boolean: 論理値型
説明
“TRUE”, “FALSE”のどちらかの値をとる

 

Integer: 整数型
説明
符号付64ビット整数
-9223372036854775808以上、 9223372036854775807以下の整数

0, 12345, -9876543

 

String: 文字列型
説明
1023文字以下の文字列。
文字列はダブルクオーテーション(”)で囲む。
文字列に含めることができる文字
エスケープ文字にも対応(ただし、¥を挿入する必要がある)

“ABC xyz 012”, “!#$%&’()*+,-./”

 

Enumeration: 列挙型
説明
任意に定義可能な文字列定数の集合から構成される型。
文字列定数に含めることができる文字は、String型と同じ。
文字列定数は1文字以上必要で、他の文字列定数と重複してはならない。

定義:[“Item0”, “Item1”, “Item2”, “Item3”], 値の例:“Item0”, “Item1”
定義:[“!#$%&’()+,-./”, “ABC xyz 123”, “”], 値の例:“!#$%&’()+,-./”

 

Binary: バイナリ型
説明
バイナリデータをBase64エンコードした文字列
保存できるサイズは32KBまで(サイズを超えた場合には切り捨てられる)

サムネイル用ビットマップ画像

 

パラメータのアクセス許可


パラメータ毎にアクセス制限を行う

appApiAccess:アプリ向けAPIからのアクセス制御を行う
ReadWrite
アプリからもWebAPIからもread/writeが可能
Read
アプリからはReadのみが可能

 

webApiAccess:WebAPIからのアクセス制御を行う
ReadWrite
webAPIからReadとWriteが可能
Read
webAPIからReadのみが可能
None
webAPIからはReadもwriteも不可能

 

パラメータファイルフォーマット


アプリパラメータ定義ファイル (PrefDefFile:appPrefs.json)

{
"preferenceVersion" :{"major":"1", "minor":"1"},

"preference": [ {"prefName" :"Pref0",
"prefType" :"Boolean",
"appApiAccess" :"ReadWrite",
"webApiAccess" :"ReadWrite",
"defaultValue" :"TRUE" },


{"prefName" :"Pref1",
"prefType" :"Integer",
"appApiAccess" :"Read",
"webApiAccess" :"None",
"defaultValue" :"0"} ,


{"prefName" :"Pref2",
"prefType" :"String",
"defaultValue" :"This is a ¥"String¥"."} ,


{"prefName" :"Pref3",
"prefType" :"Enumeration",
"enumerationList" : ["Item0", "Item1", "Item2"],
"defaultValue" :"Item0"} ,


{"prefName" :"Pref4",
"prefType" :"Binary",
"defaultValue" :" YWJjZGVmZWZn"}
]
}

パラメータ定義ファイルは、 JSONフォーマットで記述します

 

アプリパラメータ定義ファイルについて説明します。

 

パラメータ定義ファイルのサイズ制約


アプリパラメータ定義ファイル(PrefDefFile:appPrefs.json)は最大64KB
※インストール時に定義ファイルのサイズが64KBを超える場合にはエラーとなる。

アプリパラメータ値内部管理ファイル(PrefValFile:appPrefs.json)は最大128KB
※パラメータ保存時に内部管理ファイルのサイズが128KBを超える場合にはエラーとなる。

 

・設定時にパラメータ値保存ファイルの最大サイズを128KB以下に抑えることで保存時のサイズエラーをなくすことが可能
・各パラメータの設定値を最大サイズ以下で扱う場合は、最大サイズが128KBを超えるように設定することも可能
・パラメータ保存ファイルのサイズは下記の計算式で計算することが出来る(単位:Byte)

Boolean型:prefNameのサイズ+154+valueのサイズ(true(4)/false(5))+defaultValueのサイズ( true (4)/ false (5) )+ webApiAccessのサイズ(ReadWrite(9)/Read(4)/None(4))+ appApiAccessのサイズ(ReadWrite(9)/Read(4))

 

Integer型:prefNameのサイズ+154+valueのサイズ+defaultValueのサイズ+ webApiAccessのサイズ(ReadWrite(9)/Read(4)/None(4))+ appApiAccessのサイズ(ReadWrite(9)/Read(4))

 

String型:prefNameのサイズ+153+valueのサイズ+defaultValueのサイズ+ webApiAccessのサイズ(ReadWrite(9)/Read(4)/None(4))+ appApiAccessのサイズ(ReadWrite(9)/Read(4))

 

Enumeration型: prefNameのサイズ+ 193 + 154+valueのサイズ+defaultValueのサイズ+ (Enumeration Listの要素のサイズ+ 17) * Enumeration Listの要素数+ webApiAccessのサイズ(ReadWrite(9)/Read(4)/None(4))+ appApiAccessのサイズ(ReadWrite(9)/Read(4))

 

Binary型:prefNameのサイズ+153+valueのサイズ+defaultValueのサイズ+ webApiAccessのサイズ(ReadWrite(9)/Read(4)/None(4))+ appApiAccessのサイズ(ReadWrite(9)/Read(4))

 

パラメータ値保存ファイル:各パラメータ保存サイズの合計+109+majorVersionのサイズ+minorVersionのサイズ +各パラメータのprefNameとvalueとenumerationLisの中にあるエスケープ文字の数

 

アプリアップデート時の設定値の対応


インストール済みアプリ(A)のpreferenceVersionとアップデートパッケージ(B)中のpreferenceVersionを比較し、次の動作を行う

1.Majorバージョンが違う場合
アップデートパッケージのアプリパラメータ定義ファイルに置き換え → インストール済みアプリの値は一切利用しない

 

2.Minorバージョンが違う場合
(A)と(B)の両方に存在するパラメータ : (A)のvalueを設定
・ただし、 その他の属性値は変更される(defaultValueや、appApiAccessなども値を変更される)
・同じパラメータ名で、型が変わる場合は、defaultValueを設定
・EnumerationListの要素にvalueがなければ、defaultValueを設定
(A)のみに存在するパラメータ : そのパラメータを削除
(B)のみに存在するパラメータ : そのパラメータを追加

 

3.MajorバージョンもMinorバージョンも同じ場合
(A)と(B)のvalue以外の属性値(defaultValue, webApiAccess, appApiAccess, EnumerationList)が一つでも異なっていればエラー
(A)と(B)の全ての属性値が同じ場合 (A)のvalueを設定

アップデート完了後、preferenceVersionは、アップデートパッケージのものに設定される

 

設定値Restore時の対応


インストール済みアプリ(A)のpreferenceVersionと、リストアファイル(B)のpreferenceVersionを比較し、次の動作を行う

1.Majorバージョンが違う場合
エラー

 

2.Minorバージョンが違う場合
(A)と(B)の両方に存在するパラメータ : (B)の値を設定
・ただし、 valueのみが変更され、その他の属性値は変更されない
(defaultValueや、appApiAccessなどは変更されない)
・同じパラメータ名で型が違う場合は、何もしない
・EnumerationListの要素に、(B)の値が無ければ、何もしない
(A)のみに存在するパラメータ : 何もしない
(B)のみに存在するパラメータ : 何もしない

 

3.MajorバージョンもMinorバージョンも同じ場合
(A)と(B)のvalue以外の属性値(defaultValue, webApiAccess, appApiAccess, EnumerationList)が一つでも異なっていればエラー
(A)と(B)の全ての属性値が同じ場合 (B)のvalueを設定

リストア完了後、preferenceVersionは変更されない

 

API仕様


WebAPI仕様については、AdamWebAPI仕様書(AdamWebAPI_Specification_Vx_xx.pdf)を参照してください。

アプリ向け仕様については、AdamAppAPI仕様書(AdamAppAPI_Specification_Vx_xx.pdf)を参照してください。

 

アプリ向けAPI仕様一覧


パラメータ取得API

E_ADAM_ERR ADAM_AppPref_GetBoolean(const char* pPrefName, bool* pValue);
E_ADAM_ERR ADAM_AppPref_GetInteger(const char* pPrefName, int64_t* pValue);
E_ADAM_ERR ADAM_AppPref_GetString(const char* pPrefName, char* pValue, unsigned int size);
E_ADAM_ERR ADAM_AppPref_GetEnumeration(const char* pPrefName, unsigned int* pValue);
E_ADAM_ERR ADAM_AppPref_GetBinary(const char* pPrefName, unsigned char* pValue,
unsigned int size);

パラメータ設定API

E_ADAM_ERR ADAM_AppPref_Lock();
E_ADAM_ERR ADAM_AppPref_Unlock();

 

E_ADAM_ERR ADAM_AppPref_BeginTransaction();
E_ADAM_ERR ADAM_AppPref_CancelTransaction();
E_ADAM_ERR ADAM_AppPref_SaveTransaction();

 

E_ADAM_ERR ADAM_AppPref_SetBoolean(const char* pPrefName, bool value);
E_ADAM_ERR ADAM_AppPref_SetInteger(const char* pPrefName, int64_t value);
E_ADAM_ERR ADAM_AppPref_SetString(const char* pPrefName, const char* pValue);
E_ADAM_ERR ADAM_AppPref_SetEnumeration(const char* pPrefName, unsigned int value);
E_ADAM_ERR ADAM_AppPref _SetBinary(const char* pPrefName, unsigned char* pValue,
unsigned int size)
E_ADAM_ERR ADAM_AppPref_Reset();

パラメータ更新通知用API

typedef void (T_ADAM_NOTIFY_APP_PREF_UPDATE_HANDLER)(char const pPrefName[], const
unsigned int prefSize);
typedef struct ST_ADAM_SYSTEM_HANDLERS {
T_ADAM_STOP_HANDLER m_stopHandler;
T_ADAM_NOTIFY_APP_PREF_UPDATE_HANDLER m_notifyAppPrefUpdateHandler;
T_ADAM_SERVER_REQUEST_RECEIVE_HANDLER m_serverRequestReceiveHandler;
} ST_ADAM_SYSTEM_HANDLERS;

 

パラメータファイルフォーマット


アプリパラメータ定義ファイル(PrefDefFile:appPrefs.json)

{
"preferenceVersion": {"major":"1", "minor":"1"},
"preference":[{"prefName" :"Pref0",
"prefType" :"Boolean",
"appApiAccess" :"ReadWrite",
"webApiAccess" :"ReadWrite",
"defaultValue" :"TRUE" },

 

{"prefName" :"Pref1",
"prefType" :"Integer",
"appApiAccess" :"Read",
"webApiAccess" :"None",
"defaultValue" :"0"} ,

 

{"prefName" :"Pref2",
"prefType" :"String",
"appApiAccess" :"Read",
"webApiAccess" :"Read",
"defaultValue" :"ABC"} ,

 

{"prefName" :"Pref3",
"prefType" :"Enumeration",
"enumerationList" :
["Item0", "Item1", "Item2"]
"defaultValue" :"Item0"} ,
}

アプリパラメータ内部管理ファイル(PrefValFile:appPrefs.json)

{
"funcId" :"123",
"preferenceVersion": {"major":"1", "minor":"1"},
"preference":[{"prefName" :"Pref0",
"prefType" :"Boolean",
"appApiAccess" :"ReadWrite",
"webApiAccess" :"ReadWrite",
"defaultValue" :"TRUE" ,
"value" :"TRUE"},


{"prefName" :"Pref1",
"prefType" :"Integer",
"appApiAccess" :"Read",
"webApiAccess" :"None",
"defaultValue" :"0" ,
"value" :"0"},


{"prefName" :"Pref2",
"prefType" :"String",
"appApiAccess" :"Read",
"webApiAccess" :"Read",
"defaultValue" :"ABC" ,
"value" :"ABC"},


{"prefName" :"Pref3",
"prefType" :"Enumeration",
"appApiAccess" :"ReadWrite",
"webApiAccess" :"ReadWrite",
"enumerationList" :
["Item0", "Item1", "Item2"]
"defaultValue" :"Item0" ,
"value" :"Item0"},
}