NFC 読み取りの構成

NFC (近距離無線通信) タグをスキャンまたはスキャンを停止します。

オプション 

  • [処理] では、NFC タグのスキャンを開始する ([読み取り]) か、停止する ([キャンセル]) かを指定します。

次のオプションは、[読み取り] の場合にのみ使用します:

  • [スクリプト] には、タグが読み取られたとき、エラーが発生したとき、ユーザが操作をキャンセルしたとき、またはキャンセルオプションを使用して別の [NFC 読み取りの構成] スクリプトステップによって操作がキャンセルされたときに実行されるスクリプトを指定します。

  • [引数] (オプション) ではそのスクリプトのスクリプト引数を指定します。

  • [タイムアウト] (オプション) は指定した秒数が経過した後、読み取り操作を自動的にキャンセルします。

  • [連続読み取り] (オプション) は、値がゼロ以外の場合に、ユーザが [キャンセル] ボタンをタップするか、タイムアウト引数に到達するか、オペレーティングシステムにより設定された時間制限に到達するまで、タグを読み取るようにスクリプトステップを設定します。このオプションがゼロと指定されているか、または指定されていない場合、1 つのタグだけを読み取ります。

  • [結果を JSON として書式設定] (オプション) にゼロ以外の値を指定すると、スクリプトが NFC タグのデータを JSON オブジェクトとして受け取ります。このオプションがゼロと指定されているか、または指定されていない場合、データを複数行の文字列として受け取ります。

互換性 

製品 サポート
FileMaker Pro いいえ
FileMaker Go はい
FileMaker WebDirect いいえ
FileMaker Server いいえ
FileMaker Cloud いいえ
FileMaker Data API いいえ
カスタム Web 公開 いいえ

起点バージョン 

19.0

説明 

このスクリプトステップを使用して、少量のデータでプログラムされている NFC タグをスキャンまたはスキャン停止します。多くの場合、NFC タグ内のデータは、http、tel、fmp、mailto などのプロトコルを使用する URL です。

NFC タグのデータを返すために [スクリプト] オプションで指定されたスクリプト内で Get (スクリプト引数) 関数が呼び出される必要があります。[結果を JSON として書式設定] の設定に基づいて、NFC タグのデータは JSON オブジェクトまたは複数行の文字列として返されます。

次の表は、JSON オブジェクトの各要素と複数行の文字列の各行を説明します。NFC 引数の詳細については、NDEF (NFC Data Exchange Format) の仕様を参照してください。

JSON 要素

文字列行番号

説明

action

1

スクリプトが呼び出された理由。この関数が返す値は次のとおりです:

  • TagRead: NFC タグが読み取られた場合

  • CanceledByUser: ユーザが [キャンセル] ボタンをタップした場合

  • CanceledByError: エラーが発生した場合

error

2

エラー文字列

parameter

3

[スクリプト指定] ダイアログボックスで指定されたオプションのスクリプト引数

payloadCount

4

タグから読み取られた NFC レコードの数

payloads -

JSON では、後の行のオブジェクトの配列であり、NFC レコードごとに 1 つずつ存在します。複数行の文字列では、NFC レコードごにと 5 行目から 8 行目が繰り返されます。

identifier

5

NFC レコードの識別子

primary

6

NFC レコードのペイロード (文字列)

type

7

NFC レコードのタイプ

typeNameFormat

8

NFC レコードのタイプ名形式

secondary - 追加のペイロード情報が存在する場合、その情報 (JSON のみ)

次に JSON オブジェクトとしての NFC タグのデータの例を示します:

コピー
{
  "action" :"TagRead",
  "error" : "",
  "parameter" :"Optional script parameter",
  "payloadCount" :2,
  "payloads" :
  [
    {
      "identifier" : "",
      "primary" :"This is the content from the NFC card.",
      "secondary" : "en",
      "type" :"T",
      "typeNameFormat" :1
    },
    {
      "identifier" : "",
      "primary" : "https://example.com",
      "secondary" : "",
      "type" :"U",
      "typeNameFormat" :1
    }
  ]
}


同じ NFC タグデータを複数行の文字列として表すと、次のようになります:

コピー
TagRead

Optional script parameter
2

This is the content from the NFC card.
T
1

https://example.com
U
1

メモ 

  • 読み取り処理は一度に 1 つだけ実行されます。キャンセル操作が実行されたときに読み取り処理が実行中の場合、その読み取り操作はキャンセルされます。

  • [URL を開く] スクリプトステップを使用して、URL (NFC タグの読み取り時に受け取った URL など) を開くことができます。

例 1

1 つの NFC タグの読み取りを開始し、「NFC::タイムアウト」 フィールドで指定されたタイムアウト値に到達すると停止します。タグが読み取られた後、タグ内のデータが「結果を解析」サブスクリプトで指定されたフィールドに設定されます。このサブスクリプトは「1 つのスキャン終了」サブスクリプトから呼び出されます。

メインのスクリプト: 1 つをスキャン

コピー
レイアウト切り替え [「NFC タグ」 ; アニメーション: なし]
NFC 読み取りの構成 [処理: 読み取り ; スクリプト: 「1 つのスキャン終了」 ; 引数: "現在の日付と時刻: " & Get (タイムスタンプ) ; タイムアウト: NFC::タイムアウト ; 結果を JSON として書式設定:1 ]

サブスクリプト 1: 1 つのスキャン終了

コピー
変数を設定 [$scriptParam ; 値: Get (スクリプト引数)]
スクリプト実行 [指定: 一覧から;「結果を解析」; 引数: $scriptParam]
カスタムダイアログを表示: ["NFC スキャン終了" ; $scriptParam]

サブスクリプト 2: 結果を解析

「1 つをスキャン」スクリプトの [NFC 読み取りの構成] スクリプトステップ で [結果を JSON として書式設定] にゼロ以外の値が設定されているので、「結果を解析」スクリプトはタグデータを JSON オブジェクトとして解析します。

コピー
新規レコード/検索条件
フィールド設定 [NFC::テキスト ; Get (スクリプト引数)]
フィールド設定 [NFC::タグ ; JSONGetElement (NFC::テキスト ; "payloads[0].primary") ]
フィールド設定 [NFC::ペイロード数 ; JSONGetElement (NFC::テキスト ; "payloadCount") ]
フィールド設定 [NFC::結果 ; JSONGetElement (NFC::テキスト ; "action") & JSONGetElement (NFC::テキスト ; "error") ]
フィールド設定 [NFC::タイムスタンプ読み取り ; Get (タイムスタンプ)]
フィールド設定 [NFC::ID ; JSONGetElement (NFC::テキスト ; "payloads[0].identifier") ]
フィールド設定 [NFC::タイプ ; JSONGetElement (NFC::テキスト ; "payloads[0].type") ]
レコード/検索条件確定 [ダイアログあり: オフ]


複数行の文字列を使用する場合は、[結果を JSON として書式設定] オプションをゼロに設定します。その後「結果を解析」スクリプトを次のように変更します:

コピー
新規レコード/検索条件
フィールド設定 [NFC::テキスト ; Get (スクリプト引数)]
フィールド設定 [NFC::タグ ; GetValue (NFC::テキスト ; 6)]
フィールド設定 [NFC::ペイロード数 ; GetValue (NFC::テキスト ; 4)]
フィールド設定 [NFC::結果 ; GetValue (NFC::テキスト ; 1) & GetValue (NFC::テキスト ; 2)]
フィールド設定 [NFC::タイムスタンプ読み取り ; Get (タイムスタンプ)]
フィールド設定 [NFC::ID ; GetValue (NFC::テキスト ; 5)]
フィールド設定 [NFC::タイプ ; GetValue (NFC::テキスト ; 7)]
レコード/検索条件確定 [ダイアログあり: オフ]

例 2 

複数のタグの読み取りを開始し、「NFC::タイムアウト」フィールドで指定されたタイムアウト値に到達するかスキャンがキャンセルされると停止します。タグが読み取られた後、タグ内のデータが「結果を解析」サブスクリプトで指定されたフィールドに設定されます (例 1 を参照)。

メインのスクリプト: 複数をスキャン

コピー
NFC 読み取りの構成 [処理: 読み取り ; スクリプト: 「結果を解析」 ; 引数: "スキャン開始" & Get (タイムスタンプ) ; タイムアウト: NFC::タイムアウト ; 連続読み取り: 1 ; 結果を JSON として書式設定:1] 
レイアウト切り替え [「NFC スキャンリスト」 ; アニメーション: なし]

例 3 

タグの読み取りを開始し、NFC レコードのタイプが「U」つまりペイロードが URL であることを示している場合に URL を開く操作を試行します。「NFC::タイムアウト」フィールドで指定されたタイムアウト値に到達するかスキャンがキャンセルされると、スキャンが停止します。タグが読み取られた後、タグ内のデータが「結果を解析」サブスクリプトで指定されたフィールドに設定されます (例 1 を参照)。このサブスクリプトは「スキャンから開く」サブスクリプトから呼び出されます。

メインのスクリプト: スキャンして開く

コピー
NFC 読み取りの構成 [処理: 読み取り ; スクリプト: 「スキャンから開く」 ; 引数: "スキャン開始" & Get (タイムスタンプ) ; タイムアウト: NFC::タイムアウト ; 結果を JSON として書式設定:1 ] 
レイアウト切り替え [「NFC スキャンリスト」 ; アニメーション: なし]

サブスクリプト: スキャンから開く

コピー
変数を設定 [$scriptParam ; 値: Get (スクリプト引数)]
スクリプト実行 [指定: 一覧から;「結果を解析」; 引数: $scriptParam]
レコード/検索条件確定 [ダイアログあり: オフ]
If [NFC::タイプ = "U" ]
    URL を開く [ダイアログあり: オン ; NFC::タグ] 
End If