最近のアクセス:
[ClientInformation.Id] プロパティ

このプロパティは、WEB と SD の両方のプラットフォームにおいて許容されるクライアント ID を返します。

Smart Devices アプリケーション

一部の Smart Decives アプリケーションでは、使用されているデバイス (スマートデバイス) を識別することが重要となります。たとえば、次のような例が考えられます:
  • セキュリティ強化
    • X 銀行口座の取引は、デバイス Y からだけ実行できるようにする。
    • ユーザー X が、指定された時間帯にデバイス Y と Z だけを使用できるようにする。
  • プロモーション
    • 自社のアプリケーションを複数インストールしたユーザーに、X の割引を適用する。
  • 利用統計の計算
デバイスを一意に識別する特徴となる、デバイスの「シリアル番号」や MAC アドレスに相当する情報を把握できるのが一番ですが、たやすくは入手できません。
すべてのデバイスに、ソフトウェアでアクセスできる何らかの一意の識別情報があるのは事実ですが、プライバシーを理由として「使用」を意図したものになっておらず、アクセスすること自体禁じられている場合もあります (iOS)。
ClientInformation API 外部オブジェクト (X Evolution 3) の ClientInformation.Id プロパティは、デバイス識別メカニズムを用いて、この状況を打破します。このメカニズムの実装には、ベースとなる共通部分と、プラットフォームごとのバリエーションがあります。
ClientInformation.Id の値は次のようになります:
  • 世界で 1 つです。
GUID (UUID) で適用されるのと同じ条件です。
次の状況下では、2 台のデバイスが ClientInformation.Id として同じ値を返す場合があります:
  • iOS で、デバイスに別のデバイスのデータを復元した場合
  • Android で、root 化したデバイスで戻り値が変わる可能性があり、その場合は一意性が保証されなくなる
  • アプリケーションの存続期間 (インストールされてからアンインストールされるまで) にわたって (すべてのプラットフォーム上で) 不変です。
  • 各デバイスの ClientInformation.Id の値は一意です。
Android では、あるデバイスにインストールされた GX アプリケーションはすべて同じ値を返します (後出の「付録」で例外についてご確認ください)。
iOS では、同じデバイスがアプリケーションによって異なる ClientInformation.Id 値を返す場合があります (後出の「付録」を参照してください)。
まとめ:
  • デバイス (ハードウェア) を一意に識別するという作業にベスト プラクティスはなく、ときとして不可能な場合もある。
  • GeneXus では、「許容可能」なデバイス識別メカニズムを採用し、そのメカニズムにはプラットフォームごとにバリエーションがある。

Web アプリケーション

Web アプリケーションの場合、 [ ClientInformation.Id ] プロパティはユーザーに ID を返します。エンドユーザーがブラウザーの Cookie を削除するまで、すべてのセッションでこの ID が使用されます。ClientInformation.Id は、最大の有効期限を含むクッキーに保存されているため、いくつかのアプリケーションとブラウザーで同じままです。ユーザーがアプリケーションにアクセスするブラウザーを識別します。
以下に使用例を紹介します。この例では、ユーザーは Web パネルの開始イベントで呼び出された ClientInformation.Id を使って識別されます。その後、この情報はデータベースに格納され、このユーザーに Web 通知を送信する別の Web パネルでも使用されます。
Event Start
    &clientId = ClientInformation.Id
   //クライアントの情報を保存: RegisteredClientId = &clientId//
Endevent
通知を送信するプロシージャーで、ClientInformation.Id を取得します (データベースに保存されている可能性があります)。Notifyclient メソッドの実行時に ClientInformation.Id をパラメーターとして渡すので、そのクライアントだけがメッセージを受信します。
&ClientId = RegisteredClientId //データベースから取得されたユーザーの ClientInformation.Id
&NotificationInfo.Id= &Id
&NotificationInfo.Message= &MyMessage
&webnotification.NotifyClient(&ClientId, &NotificationInfo)
こちらからサンプルをダウンロードできます。

付録

Android

ClientInformation.Id の値は、デバイスの内部 ID から生成された GUID です。このため、少なくとも、デバイスの寿命期間中は同じデバイスにインストールされた 2 つのアプリケーション間で必ず同じ値になります。
ただし、以下の例外が確認されています:
  • 「工場出荷時状態へのリセット」を行った場合、ID が変わることがある。
  • root 化されたデバイスでは、ID の変更が可能である。
生成された GUID は格納されるため、root 化前にインストールされたアプリケーションが返す ID 値と、root 化後にインストールされたアプリケーションが返す値が異なる可能性があります。ただし、同じアプリケーションから返される値は変化しません。
  • 所定のメーカーのデバイスは Android 2.2 でエラーが起きるため、すべてが同じ ANDROID_ID を返す。
この数値は既知の数値です。このような場合は、ランダムな GUID を (アプリケーションごとに) 生成します。
詳しい解説については、stackoverflow のこの回答を参照してください。提案されているソリューションは、GeneXus 社で採用しているものと実質的に同じですが、GeneXus 社では GUID の生成にあたって IMEI は考慮していません (そのためには、特別な許可が必要になるためです)。

iOS

ClientInformation.Id の値は、デバイスに初めて GX アプリケーションをインストールした時点で算出した GUID となります。この値は、いわゆる "キーチェーン" に格納され、値を作成したアプリケーションがアンインストールされ、再インストールされた場合でも維持されます。
iOS では、各アプリケーションに独自の "キーチェーン" がありますが、複数のアプリケーションで同じキーチェーンを共有することも可能です。共有キーチェーンがある場合は、1 つのキーチェーンを共有するすべてのアプリケーションが、所定のデバイスについて同じ ClientInformation.Id 値を返します。共有キーチェーンがない場合、デバイスにインストールされている各アプリケーションが異なる ClientInformation.Id 値を返します。
ClientInformation.Id の値は、工場出荷時状態へのリセットが行われた場合、またはファームウェアが復元された場合 (オペレーティングシステムの再インストール) に変わる可能性があります。また、セキュリティコピーが復元されなかった場合も同様です。これには、たとえば、デバイスが別のユーザーの手に渡った (販売されたなど) 場合が該当します。
複数のデバイスで同じセキュリティコピーが復元されたときは、複数のデバイスで ClientInformation.Id 値が同じになる場合があります。こういう状況は、デバイスを新しいモデルに交換し、交換前のデバイスのセキュリティコピーを交換後のデバイスで復元したときに起こることがあります。

同じプロバイダーの複数のアプリケーションについて同じ ClientInformation.Id 値を取得する方法

これを実現するには、実装を変更する必要があります。また、GX ユーザーが、この動作を制御可能であることを理解する必要があります。値を共有するアプリケーションと共有しないアプリケーションは、ユーザーの決断により異なります。
iOS におけるアプリケーションの一意の識別子 (アプリケーション ID) は、2 つの部分から構成されます: <Bundle Seed ID>.<Bundle Identifier>。Bundle Seed ID は、一意の 10 文字から成るチェーンで、App Store 内で一意であり、Apple により生成されます。Bundle Identifier は、同じプロバイダーのアプリケーションで一意となる文字のチェーンで、GX では、メイン (Main) の同名のプロパティで設定します。
同じプロバイダーの複数のアプリケーションで、同じデバイスについて同じ ClientInformation.Id 値を返すには、それらのアプリケーションで Bundle Seed ID の値が同じであることが必要です。
Bundle Seed Id はアプリケーションの公開後は変更できないため、この特定の機能について理解しておくことがとても重要です。幸い、Apple サイト (developer.apple.com) で新しい App ID が作成されるときの既定値は、Bundle Seed ID で、これがすべてのアプリケーションで共有されます (コンボボックスで [ Use Team ID ] を選択):
イメージ:20200.png









サブページ
Created: 14/09/18 03:13 by Admin Last update: 21/05/21 03:29 by Admin
カテゴリ
Powered by GXwiki 3.0