Secure Storage Manager のファイル展開

DataWedge 15.0

概要

このガイドでは、Secure Storage Manager (SSM) を使用して、NG SimulScan テンプレートおよび DataWedge 構成ファイル (.DB) を安全に展開する方法について説明します。これらのファイルは、StageNow を経由して展開するか、あるいはアプリケーション内部でプログラムで展開することができます。

NG SimulScan テンプレート

テンプレート ビルダを使用して NG SimulScan テンプレートを生成した後、以下のいずれかの方法を使用してテンプレートを安全に展開します。

  • Zebra の StageNow ツール
  • アプリケーションからプログラムで

StageNow 経由での展開

StageNowを使用して NG SimulScan テンプレートを安全に展開する方法は以下の通りです。

  1. ホスト コンピュータで StageNow を起動します。

  2. StageNow のホーム画面で、左側のメニューから [新しいプロファイルの作成] をクリックします。画像

  3. MX バージョン 11.3 以降を選択します (これにより、ファイル マネージャの 「ファイルをアプリに展開」 オプションがサポートされます)。デバイスの MX バージョンは、選択したバージョンと一致している必要があります。バージョンの確認方法については、MX のドキュメンテーション をご覧ください。画像

  4. リストから [Xpert モード] を選択し、[作成] をクリックします。 画像

  5. プロファイル名を入力します。[スタート] をクリックします 画像

  6. 下にスクロールし、[FileMgr] の横のプラス記号 (+) をクリックします。これにより、右側の Config タブに FileMgr が追加されます。画像

  7. [追加] をクリックします。 画像

  8. FileMgr 設定で、次の項目を入力/選択します。

    • ファイル アクション: アプリケーションのファイルを展開
    • ターゲット アプリケーション フィールドの定義: com.symbol.datawedge/ngsstemplate/TemplateName.xml
      (「TemplateName.xml」をテンプレートの XML ファイル名に置き換えてください。)

    画像

  9. 下にスクロールし、以下を選択します。

    • ソース アクセス方法: デバイス ファイル システム内のファイル

    画像

  10. [ソース パスとファイル名] の隣にある [...] をクリックします。以下の項目を入力/選択し、[OK] をクリックします。

    • ローカル デバイスのメディア タイプ: その他
    • ファイル名の入力: /storage/emulated/0/Download/TemplateName.xml
      (「TemplateName.xml」をテンプレートXMLファイル名に置き換えてください。デバイスのストレージ場所 /storage/emulated/0/Download として確認してください。)

    画像

  11. [続行] をクリックします。 画像

  12. [プロファイルの完了] をクリックします。 画像

  13. 展開中はデバイスをネットワークに接続しておく必要があります。NG SimulScan テンプレートをデバイスに展開するためには、目的のツールに基づいて以下のいずれかの方法を使用します。

    • StageNow: StageNow プロファイルからバーコードを生成します。デバイス上で StageNow クライアントを開き、バーコードをスキャンします。
    • EMM: StageNow インストールから StageNow XML ファイルをエクスポートします。OEMConfig または MX を使用して XML を送信します。

アプリケーション経由での展開

アプリケーションで NG SimulScan をプログラムで安全に展開するには、以下の手順に従います。

  1. AndroidManifest.xml ファイルに以下の権限を追加します。

    <uses-permission android:name="com.zebra.securestoragemanager.securecontentprovider.PERMISSION.WRITE" /><uses-permission android:name="com.zebra.securestoragemanager.securecontentprovider.PERMISSION.READ" />
  2. AndroidManifest.xml ファイルに、アプリケーションで SSM を操作できるようにする次のクエリを追加します。

    <queries><package android:name="com.zebra.securestoragemanager" /><provider android:authorities="com.zebra.securestoragemanager.securecontentprovider"/></queries>
  3. AndroidManifest.xml ファイルで、次のコードを追加して、アプリケーションでファイルに読み取り権限を付与できる FileProvider を定義します。com.your.package.name をアプリケーションの実際のパッケージ名に置き換えます。

    <provider android:name="androidx.core.content.FileProvider" android:authorities="com.your.package.name.provider" android:exported="false" android:grantUriPermissions="true"><meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/></provider>
  4. アプリケーションプロジェクト内の 「res」 親フォルダにある 「xml」 サブフォルダに、「provider_paths.xml」という名前のファイルを次の内容で追加します。

    <?xml version="1.0" encoding="utf-8"?><paths xmlns:android="http://schemas.android.com/apk/res/android"><root-path path="/data/tmp/public" name="public"/><root-path path="/enterprise/usr" name="user"/><external-path path="." name="external_files"/><files-path path="." name="template"/></paths>
  5. アプリケーション プロジェクト内で、「assets」 フォルダ内にディレクトリ (documentCaptureTemplates など) を作成し、このフォルダ内に XML テンプレートをコピーします。画像

  6. アプリケーションで、uploadTemplates() という関数を追加します。この関数は、「assets」 ディレクトリからファイルをコピーし、copy 関数 copyFileViaSSM() を使用してファイルをアップロードします。

    public void uploadTemplates() {
    AssetManager assetManager = getAssets(); String[] files = null; try { files = assetManager.list(ASSET_TEMPLATE_DIR); } catch (IOException e) { Log.e(TAG, "Failed to get asset file list: " + e.getMessage()); } if (files != null) { for (String filename : files) { InputStream in = null; OutputStream out = null; try { in = assetManager.open(ASSET_TEMPLATE_DIR + "/" + filename); String outDir = getFilesDir().getAbsolutePath() + "/"; File outFile = new File(outDir, filename); out = new FileOutputStream(outFile); copyFile(in, out); in.close(); out.flush(); out.close(); copyFileViaSSM(outFile.getAbsolutePath(), "ngsstemplate"); } catch (IOException e) { Log.e("tag", "Failed to copy asset file: " + filename, e); } } } else { Log.d(TAG, "asset file list is null"); }
    } private void copyFile(InputStream in, OutputStream out) throws IOException {
    byte[] buffer = new byte[1024]; int read; while ((read = in.read(buffer)) != -1) { out.write(buffer, 0, read); }
    } public void copyFileViaSSM(String sourcePath, String type) {
    File file = new File(sourcePath); Uri contentUri = FileProvider.getUriForFile(this, this.getPackageName() + ".provider", file); this.getApplicationContext().grantUriPermission("com.zebra.securestoragemanager", contentUri, Intent.FLAG_GRANT_READ_URI_PERMISSION); // Needed to grant permission for SSM to read the uri Uri cpUriQuery = Uri.parse(AUTHORITY_FILE + this.getPackageName()); try { ContentValues values = new ContentValues(); values.put("target_app_package", String.format("{\"pkgs_sigs\": [{\"pkg\":\"%s\",\"sig\":\"%s\"}]}", "com.symbol.datawedge", signature)); values.put("data_name", String.valueOf(contentUri)); // Passes the content uri as a input source values.put("data_type", "3"); values.put("data_value", "com.symbol.datawedge/" + type + "/" + file.getName()); // Replace “targetPath” with the package name of the target app that is accessing the deployed file (or retrieve the app package using context.getPackageName()) followed by "/" and the full path of the file, e.g. "context.getPackageName()/A.txt" values.put("data_persist_required", false); Uri createdRow = this.getContentResolver().insert(cpUriQuery, values); Log.i(TAG, "SSM Insert File: " + createdRow.toString()); } catch (Exception e) { Log.e(TAG, "SSM Insert File - error: " + e.getMessage() + "\n\n"); }
    }
  7. uploadTemplates() メソッドを呼び出して、アセット フォルダから DataWedge にテンプレート ファイルをアップロードします。

DataWedge 構成ファイル

DataWedge プロファイル (dwprofile_profilename.db) および/または構成ファイル (datawedge.db) をエクスポートした後、次のいずれかの方法を使用して、ファイルを安全に展開します。

  • Zebra の StageNow ツール
  • アプリケーションからプログラムで

StageNow 経由での展開

StageNow を使用して DataWedge プロファイルまたは設定ファイルを安全に展開するには、次の手順を実行します。

  1. ホスト コンピュータで StageNow を起動します。

  2. StageNow のホーム画面で、左側のメニューから [新しいプロファイルの作成] をクリックします。画像

  3. MX バージョン 11.3 以降を選択します (これにより、ファイル マネージャの 「ファイルをアプリに展開」 オプションがサポートされます)。デバイスの MX バージョンは、選択したバージョンと一致している必要があります。バージョンの確認方法については、MX のドキュメンテーション をご覧ください。画像

  4. リストから [Xpert モード] を選択し、[作成] をクリックします。 画像

  5. プロファイル名を入力します。[スタート] をクリックします 画像

  6. 下にスクロールし、[FileMgr] の横のプラス記号 (+) をクリックします。これにより、右側の Config タブに FileMgr が追加されます。画像

  7. [追加] をクリックします。 画像

  8. FileMgr 設定で、次の項目を入力/選択します。

    • ファイル アクション: アプリケーションのファイルを展開
    • ターゲット アプリケーション フィールドの定義: com.symbol.datawedge/config/datawedge.db

      (プロファイルを展開する場合は、「datawedge.db」 をプロファイルファイル名に置き換えてください。)
    • ソース アクセス方法: デバイス ファイル システム内のファイル

    画像

  9. [ソース パスとファイル名] の隣にある [...] をクリックします。以下の項目を入力/選択し、[OK] をクリックします。

    • ローカル デバイスのメディア タイプ: その他
    • ファイル名の入力: /storage/emulated/0/Download/datawedge.db
      (プロファイルを展開する場合は、「datawedge.db」 をプロファイルファイル名に置き換えてください。デバイスのストレージ場所 /storage/emulated/0/Download として確認してください。)

    画像

  10. [続行] をクリックします。 画像

  11. [プロファイルの完了] をクリックします。 画像

  12. 展開中はデバイスをネットワークに接続しておく必要があります。DataWedge 構成ファイルをデバイスに配置するには、目的のツールに基づき、以下の方法のいずれかを使用します。

    • StageNow: StageNow プロファイルからバーコードを生成します。デバイス上で StageNow クライアントを開き、バーコードをスキャンします。
    • EMM: StageNow インストールから StageNow XML ファイルをエクスポートします。OEMConfig または MX を使用して XML を送信します。

アプリケーション経由での展開

DataWedge プロファイルまたは設定ファイルをアプリケーションに安全に配置するには、以下の手順に従います。

  1. AndroidManifest.xml ファイルに以下の権限を追加します。

    <uses-permission android:name="com.zebra.securestoragemanager.securecontentprovider.PERMISSION.WRITE" /><uses-permission android:name="com.zebra.securestoragemanager.securecontentprovider.PERMISSION.READ" />
  2. AndroidManifest.xml ファイルに、アプリケーションで SSM を操作できるようにする次のクエリを追加します。

    <queries><package android:name="com.zebra.securestoragemanager" /><provider android:authorities="com.zebra.securestoragemanager.securecontentprovider"/></queries>
  3. AndroidManifest.xml ファイルで、次のコードを追加して、アプリケーションでファイルに読み取り権限を付与できる FileProvider を定義します。「com.your.package.name」 をアプリケーションのパッケージ名に置き換えてください。

    <provider android:name="androidx.core.content.FileProvider" android:authorities="com.your.package.name.provider" android:exported="false" android:grantUriPermissions="true"><meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/></provider>
  4. アプリケーションプロジェクト内の 「res」 親フォルダにある 「xml」 サブフォルダに、「provider_paths.xml」という名前のファイルを次の内容で追加します。

    <?xml version="1.0" encoding="utf-8"?><paths xmlns:android="http://schemas.android.com/apk/res/android"><root-path path="/data/tmp/public" name="public"/><root-path path="/enterprise/usr" name="user"/><external-path path="." name="external_files"/><files-path path="." name="template"/></paths>
  5. アプリケーションプロジェクト内で、「assets」 フォルダ内にディレクトリ (ConfigDBs など) を作成し、このフォルダ内に DataWedge プロファイルまたは構成ファイルをコピーします。画像

  6. アプリケーションで、uploadTemplates() という関数を追加します。この関数は、「assets」 ディレクトリからファイルをコピーし、copy 関数 copyFileViaSSM() を使用してファイルをアップロードします。

    public void uploadConfigDB(boolean isFullDB) {
    AssetManager assetManager = getAssets(); String[] files = null; try { files = assetManager.list(ASSET_DB_DIR); } catch (IOException e) { Log.e(TAG, "Failed to get asset file list: " + e.getMessage()); } if (files != null) { for (String filename : files) { if (isFullDB &amp;&amp; filename.equals("datawedge.db")) { integrateFile(assetManager, filename); } else if (!isFullDB &amp;&amp; filename.startsWith("dwprofile_")) { integrateFile(assetManager, filename); } } } else { Log.d(TAG, "asset file list is null"); }
    } private void integrateFile(AssetManager assetManager, String filename) { InputStream in = null; OutputStream out = null;
    try { in = assetManager.open(ASSET_DB_DIR + "/" + filename); String outDir = getFilesDir().getAbsolutePath() + "/"; File outFile = new File(outDir, filename); out = new FileOutputStream(outFile); copyFile(in, out); in.close(); out.flush(); out.close(); copyFileViaSSM(outFile.getAbsolutePath(), "config"); } catch (IOException e) { Log.e("tag", "Failed to copy asset file: " + filename, e); }
    } private void copyFile(InputStream in, OutputStream out) throws IOException { byte[] buffer = new byte[1024]; int read; while ((read = in.read(buffer)) != -1) { out.write(buffer, 0, read); } } public void copyFileViaSSM(String sourcePath, String type) {
    File file = new File(sourcePath); Uri contentUri = FileProvider.getUriForFile(this, this.getPackageName() + ".provider", file); this.getApplicationContext().grantUriPermission("com.zebra.securestoragemanager", contentUri, Intent.FLAG_GRANT_READ_URI_PERMISSION); // Needed to grant permission for SSM to read the uri Uri cpUriQuery = Uri.parse(AUTHORITY_FILE + this.getPackageName()); try { ContentValues values = new ContentValues(); values.put("target_app_package", String.format("{\"pkgs_sigs\": [{\"pkg\":\"%s\",\"sig\":\"%s\"}]}", "com.symbol.datawedge", signature)); values.put("data_name", String.valueOf(contentUri)); // Passes the content uri as a input source values.put("data_type", "3"); values.put("data_value", "com.symbol.datawedge/" + type + "/" + file.getName()); // Replace “targetPath” with the package name of the target app that is accessing the deployed file (or retrieve the app package using context.getPackageName()) followed by "/" and the full path of the file, e.g. "context.getPackageName()/A.txt" values.put("data_persist_required", false); Uri createdRow = this.getContentResolver().insert(cpUriQuery, values); Log.i(TAG, "SSM Insert File: " + createdRow.toString()); } catch (Exception e) { Log.e(TAG, "SSM Insert File - error: " + e.getMessage() + "\n\n"); }
    }
  7. uploadConfigDB (boolean isFullDB) メソッドを呼び出して、アセット フォルダから DataWedge に構成 DB ファイルをアップロードします。

    • フル構成 DB をアップロードする場合は、isFullDB パラメータに 「true」 を渡します。
    • プロファイル DB をアップロードする場合は、isFullDB パラメータに 「false」 を渡します。

関連ガイド: