DEV Community

Cover image for アプリコンテキストの使い方

アプリコンテキストの使い方

PubNubApp Contextは、User、Channel、およびMembership情報のサーバレスストレージメカニズムを提供することで、複雑なリアルタイム機能の開発を簡素化します。 App Contextはデータが変更されるたびにイベントをトリガーし、アプリをリアルタイムで更新できるようにします。また、保存されたデータはIlluminateFunctions、その他のPubNubサービスで使用でき、よりスマートな意思決定を行うことができます。 また、BizOps Workspaceを使用することで、コード不要の直感的なインターフェイスでこのデータを管理できます。

アプリコンテキストとは?

アプリコンテキスト(旧称オブジェクト)により、次のことが可能になります:

  • アプリケーション内のユーザーとチャネル、およびそれらの間の関係に意味を持たせます。
  • すべてのエンティティのメタデータをサーバーに保存し、クライアントにグローバルな真実のソースを簡単に提供できます。 Userは人間を表す必要はなく、代わりにデバイスのステータスをUserオブジェクトに保存するのが一般的です。
  • オブジェクトの値が変更されると、即座にリアルタイムのイベントを受け取ることができる。

どんなアプリケーションでも App Context を使用することができますが、チャットソリューションを作成する開発者には特に人気があります。

App Context は、ユーザーと チャンネルに推奨されるフィールドのセットと、それらの間のメンバーシップに推奨されるフィールドを提供します。 これらのフィールドのほとんどはオプションなので、どのフィールドを入力するか選択したり、独自のカスタムフィールドを提供することができます。

Diagram showing user management, memberhip, channel management

App Contextの使用例

前述の通り、App Context はチャットソリューションを作成する開発者に特に人気がありますが、様々なユースケースで使用することができます:

  • チャット:ユーザー情報(名前、プロフィール写真、「休暇中」ステータス、役職)、チャンネル情報(アイコン、説明、視聴者)、ユーザーの役割を保存し、チャンネルごと、ユーザーごとに最後に読まれたメッセージを追跡します。
  • スポーツ、メディア、エンターテイメントライブ投票、ライブトリビア、リアルタイム入札、商品やプロモーションのCTA(コール・トゥ・アクション)オーバーレイ。
  • ゲームプレイヤーレベル、獲得ゲーム、バッジを含むリアルタイムのプレイヤー統計、リーダーボードのトラッキングと管理
  • その他ユーザー不在/アクティブステータス、不正検出のためのユーザー信頼スコア、ユーザー位置追跡、バッテリー残量や最後のセンサー読み取り値などのIoTデバイスステータス

アプリコンテキストを有効にする方法

App Contextは、以下の手順で有効にできます:

  1. 管理者ポータルにログインする。
  2. ポータルの左側にある「Apps(アプリ)」タブをクリックします。
  3. アプリケーションをクリックします。 このアプリケーションのキーセットページが表示されます。
  4. まだ作成していない場合は、「Create New Keyset」ボタンをクリックして新しいキーセットを作成します。 キーセットの設定ページが表示されます。
  5. スライダーをクリックしてApp Contextを有効にします。
  6. Bucket Region(バケット領域)の設定は、データが保存される領域です。 キーセットの変更を保存した後は、このリージョンを変更できないことに注意。
  7. User Metadata Eventsと Channel Metadata Eventsの設定が有効な場合、後述するように、データベースにデータが設定または削除されると、ユーザとチャネルのイベントがトリガされます。
  8. メンバーシップ・イベント]設定が有効な場合、後述するように、メンバーシップが追加、更新、または削除されると、メンバーシップ・イベントがトリガされます。
  9. 残りのオプションはこの記事の範囲外ですが、詳細についてはApp Contextのドキュメントを参照してください。
  10. Save Changesをクリックして、更新された変更を保存します。

ユーザーアプリコンテキスト

新しいユーザーがあなたのアプリケーションに登録されると、おそらく外部のIDプロバイダを介して、PubNubに対してそのユーザーを一意に識別する何らかの方法があるでしょう。 これは、ユーザーのクライアントがPubNub SDKを初期化するために使用するユーザーIDです。 PubNubユーザーIDは、同じユーザーを識別するためにソリューションの他の場所で使用するIDと同じではないかもしれないので、'外部ID'フィールドでそれを追跡しておくことをお勧めします。

User Name、Email、Profile URLは説明の必要はありませんが、App Context内にこれらのフィールドを保持する利点は、ユーザーがこれらのフィールドのいずれかを変更した場合、当社のすべてのSDKでサポートされているApp Contextイベントを使用して、すべてのリスニングクライアントに変更をスケールで伝播できることを意味します。

App ContextでUser representationを作成するには?

App Context Userを作成するには、2つの方法があります。

  1. PubNubの管理ポータル内にあるBizOps Workspaceを使用してユーザーを作成、管理できます。 これはコードを必要とせず、別記事で例を挙げてプロセスを説明しています:BizOps Workspaceでユーザーとチャンネルを管理する方法
  2. ユーザを作成するためのAPIは各SDKを通じて公開されています。 例えば、チャットSDKの'createUser()'メソッドは、JavaScriptのsetUUIDMetadataを呼び出してユーザーを作成します。 チャットSDK以外のSDKを使用している場合、App Contextデータを変更するための専用APIが提供されています。JavaScriptのsetUUIDMetadataAPIについてはすでに触れましたが、JavaSwiftKotlinPythonUnityなど、私たちのすべてのAPIに同等のものがあります。

チャンネルアプリのコンテキスト

PubNubはユーザーがチャンネルを購読または公開するたびに自動的にチャンネルを作成しますが、チャンネルはおそらくアプリケーションにとって意味のあるものを表しています。例えば、チャットアプリでは、通信にチャンネルを使用するグループチャットがあるかもしれませんし、ライブイベントでは投票を管理するために専用のチャンネルを使用するかもしれません。

チャネルに App Context を指定すると、そのチャネルに関連する任意のメタデータが保存・更新され、オプションでその更新がすべての関係クライアントに伝搬されます。 チャネルに 'ユーザ A とユーザ B のチャット' などの名前を付けることができ、チャネルがドキュメントの保存に関連している場合は、カスタムの 'URI' フィールドで追跡することができます。

App Contextでチャネルを作成するには?

Usersと同様に、App Context Channelを作成するには2つの方法がある。

  1. チャンネルはBizOps Workspaceを使って作成・管理できる。 これはコードを必要とせず、別記事で例を挙げてプロセスを説明している:BizOps Workspaceでユーザーとチャネルを管理する方法
  2. チャネルを作成するためのAPIは、各SDKを通じて公開されています。 例えば、'Createchannel'メソッドのファミリーは、JavaScriptのsetChannelMetadata()を呼び出します。 チャットSDK以外のSDKを使用している場合は、JavaScriptJavaSwiftKotlinPythonUnityなど、アプリコンテキストデータを変更するための専用APIが提供されます。

メンバーシップApp Context

ユーザとチャネルの両方にApp Contextを定義したので、ユーザがチャネルの'メンバー'であるかどうかを指定することで、2つの関係を定義することができます。

ユーザーがチャンネルに参加すると、同じチャンネルの他のメンバーに関するアップデートを受け取ることができる。ユーザーが参加したり脱退したりしたときや、そのユーザーのApp Contextが更新されたとき(例えば、ユーザーが自分の名前を更新したとき)にはいつでも通知を受け取ることができる。

これは、特にチャットアプリの開発者にとって、多くの価値を提供する強力なメカニズムです。 App Context を使用しない場合、すべてのユーザーを自分で追跡し、そのユーザーがどのチャネルのメンバーであるかを追跡し、そのユーザーが参加または退会したときに同じチャネルの他の全員に通知する必要があります。 この課題は直線的にスケールしないため、ソリューションのユーザーが増えれば増えるほど、この情報をすべて一元管理しようとするのは難しくなります。

App Contextを使用することで、チャットクライアントが内部状態を維持するために必要なすべての情報が提供され、PubNubAccess Managerでそのデータを完全に制御して不正アクセスを防ぐことができます。

メンバーシップの作成方法は?

ユーザーやチャンネルと同様に、メンバーシップを作成するには2つの方法があります。

  1. メンバーシップは、BizOpsワークスペースを使用してコードを記述することなく作成および管理できます。 詳細については、ドキュメントの「メンバーシップの管理」セクションを参照してください。
  2. チャネルを作成するためのAPIは、各SDKを通じて公開されています。 例えば、'Createchannel'メソッドのファミリーは、JavaScriptのsetMembershipsを隠れて呼び出します。 チャットSDK以外のSDKを使用している場合は、JavaScriptJavaSwiftKotlinPythonUnityなどのApp Contextデータを変更するための専用APIが提供されます。

App Context変更時のリアルタイムイベントの受信

App Context データが変更されると、アプリケーションはリアルタイムで変更内容を通知するイベントを受け取ります。これにより、更新のためにサーバーをポーリングすることなく、応答性の高いアプリケーションを作成できます。

PubNub SDK(チャットSDKを除く)によるApp Context変更の受信

すべてのPubNub SDKは "イベントリスナー "を公開しており、これらのリスナーを通じてApp Contextデータが変更されるたびに発生するオブジェクトイベントをリッスンすることができます。

イベントエンジンとイベントリスナーのアップデートに関するこのブログで説明されているように、執筆時点では、いくつかのSDKは「イベントリスナー」の新しいフォーマットをサポートしています。イベント・リスナーの形式にかかわらず、原則は同じです。あなたのアプリは、SDKが提供するリスナーを通じてアプリ・コンテキスト・イベントを受信するように登録する必要があります。

あなたのアプリは、SDKが提供するリスナーを通じてアプリコンテキストイベントを受信するように登録する必要があります。JavaScript SDKのドキュメントに詳述されているように、アプリコンテキストイベントの登録は以下のようになります:

const channel = pubnub.channel('channel_1');
const subscription = channel.subscription();
subscription.onObjects = 
  (objectsEvent) => { console.log("Objects event: ", objectsEvent); };
Enter fullscreen mode Exit fullscreen mode

他の言語でのApp Contextイベントの登録方法を説明したドキュメントは、以下の場所にあります: JavaSwiftKotlinPython(Pythonはイベントを「メタデータ」と呼び、他のSDKはイベントを「オブジェクト」と呼ぶことに注意)、Unityなど

作業例とインタラクティブなデモについては、BizOps Workspaceでユーザーとチャンネルを管理する方法の記事を参照してください。

PubNub Chat SDKでアプリのコンテキスト変更を受け取る

PubNub Chat SDKはstreamUpdates()APIファミリを通じてApp Contextイベントを公開します。

いくつかの例は、Web用のチャットSDKデモアプリから抜粋したものです:

//  Detect changes to the current User
useEffect(() => {
  return currentUser.streamUpdates(updatedUser => {
    if (updatedUser.name) {
      setName(updatedUser.name)
    }
    if (updatedUser.profileUrl) {
      setProfileUrl(updatedUser.profileUrl)
    }
  })
}, [currentUser])
Enter fullscreen mode Exit fullscreen mode
//  Detect changes to an array of Channels
useEffect(() => {
if (chat && privateGroups) {
    return Channel.streamUpdatesOn(privateGroups, channels => {
    //  The array of channels, privateGroups, has been updated
}
}, [chat, privateGroups])
Enter fullscreen mode Exit fullscreen mode

チャットSDKのよりシンプルな'getting stated'サンプルに基づく作業例については、BizOps Workspaceでユーザーとチャネルを管理する方法の記事を参照してください。

アプリコンテキストとPubNub Illuminate

PubNub Illuminateは、組織独自のユースケースに合わせてカスタマイズ可能なリアルタイムの意思決定および分析製品です。 この製品は、プロダクトマネージャーやアナリストを念頭に置いて設計されており、以下のことが可能です:

  • カスタム・リアルタイム集計メトリクスの定義
  • 条件とアクションを伴う決定ルールの設定と展開。
  • 追跡しているメトリクス、実行されたアクション、その結果を即座に可視化する。

エンジニアリングチームを進行中のプロジェクトから引き離すことなく、これらすべてをリアルタイムで実行できます。

PubNub Illuminteがどのようなもので、どのようにデータに対して即座に実行可能な洞察を提供できるのかについての詳しい説明はこの記事の範囲外ですが、詳細についてはドキュメントと 製品概要を参照してください。

要約すると、アプリケーションに関連するメトリクス、つまり測定したいものを定義します。 例えば、資産追跡のシナリオでは、注文が取られてからの時間数などです。 そのメトリクスに関連する何らかの条件が満たされたとき、例えば「注文からの時間」がある値を超えたとき、何らかのアクションを取ることができます。

どのアクションを取るかは自由ですが、可能なアクションのうち3つはApp Contextに関するものです:

How-to - Use App Context - Image 02

PubNub Illuminateでユーザーを更新する

定義済みまたはカスタムのユーザーメタデータを設定できます。 下のスクリーンショットではID 123のユーザのステータスが静的な値「New Status」に設定されているが、アクションのトリガーとなった条件に基づいて動的な値を設定することも可能だ。

How-to - Use App Context - Image 03

PubNub Illuminateでチャンネルを更新する

定義済みまたはカスタムのチャンネルメタデータを設定できます。 下のスクリーンショットではID 123のチャンネルの名前が静的な値'New Name'に設定されていますが、アクションのトリガーとなった条件に基づいて動的な値を設定することも可能です。

How-to - Use App Context - Image 04

PubNub Illuminateでメンバーシップを更新する

定義済みまたはカスタムの会員メタデータを設定できます。 下のスクリーンショットはユーザID123のチャンネル123のメンバーシップのステータスが静的な値「New Status」に設定されていることを示しています。 アクションをトリガーした条件に基づいて動的な値を設定することも可能です。

How-to - Use App Context - Image 05

アプリコンテキストとPubNub関数

PubNubはPubNubプラットフォームで発生しているイベントをキャプチャするためのFunctionsを提供します。Functionsを使用すると、コードを書いたり、既存の統合機能を活用して、データの変換、リルート、拡張、フィルタリング、さらには集計を行うことができます。 PubNub Functionsの詳細な概要については、Functionsのドキュメントを参照してください。

PubNub Functions内からApp Contextを更新する

Functionsが実行される環境はPubNubモジュールにアクセスできます。このモジュールはキーセットのApp Contextに完全にアクセスできます。ドキュメントから抜粋した例を以下に示します。 :

Get User App Context Metadataの

export default (event) => {
  const pubnub = require('pubnub');

  return pubnub.objects.getUUIDMetadata({
    uuid: 'my-uuid',
    include: {
      customFields: false,
    },
  })
  .then((resp) => {
    console.log(resp);
    return event.ok('Fetched UUID metadata successfully.');
  })
  .catch((err) => {
    console.log(err);
    return event.abort('Failed to fetch UUID metadata');
  });
};
Enter fullscreen mode Exit fullscreen mode

Set Channel App Context Metadataの

export default (event) => {
  const pubnub = require('pubnub');

  return pubnub.objects.setChannelMetadata({
    channel: 'my-channel',
    data: {
      name: 'channel-name',
      description: 'What a great channel',
      custom: {
        foo: 'bar',
      },
    },
    include: {
      customFields: false,
    },
  })
  .then((resp) => {
    console.log(resp);
    return event.ok('Set channel metadata successfully.');
  })
  .catch((error) => {
    console.log(err);
    return event.abort('Failed to set channel metadata.');
  });
};
Enter fullscreen mode Exit fullscreen mode

コード例の包括的なセットについては、PubNubモジュールのドキュメントを参照してください。

アプリコンテキストが変更されたときにPubNub関数をトリガーする

Event Typesのドキュメントで詳しく説明されているように、関数をトリガーできるイベントタイプは数多くあります。 これらには、メッセージやシグナルが送信されたときに検出する機能、プレゼンスイベントが発生した後に関数をトリガする機能、指定した間隔またはオンデマンドで関数を実行する機能などがあります。 この記事を書いている時点では、App Contextの更新後にFunctionを実行することはできませんが、アプリケーションがこれを必要とする場合は、サポートチームにご連絡ください。

次のステップ

App Context の動作を確認するには、App Context を当社の Chat SDK と一緒に使用して、サーバーレスストレージを使用したチャットアプリがどのように見えるかを示すChat Demoをご覧ください。 Chat Demoでは、UserやChannelのメタデータを設定し、その変更が他のリスナーやメンバーにリアルタイムで反映される様子を見ることができます。

また、App Contextに依存するBizOpsワークスペースに関する関連する3つのパートからなるシリーズもご覧ください:ユーザーとチャネルの管理会話の監視とモデレートチャットの安全なモデレート

最後に、DevRelチーム(devrel@pubnub.com)までお気軽にお問い合わせください。また、PubNubの開発に関するどのようなことでもサポートチームにお問い合わせください。

PubNubはどのようにお役に立ちますか?

この記事はPubNub.comに掲載されたものです。

私たちのプラットフォームは、開発者がWebアプリ、モバイルアプリ、およびIoTデバイスのためのリアルタイムのインタラクティブ性を構築、配信、管理するのに役立ちます。

私たちのプラットフォームの基盤は、業界最大かつ最もスケーラブルなリアルタイムエッジメッセージングネットワークです。世界15か所以上で8億人の月間アクティブユーザーをサポートし、99.999%の信頼性を誇るため、停電や同時実行数の制限、トラフィックの急増による遅延の問題を心配する必要はありません。

PubNubを体験

ライブツアーをチェックして、5分以内にすべてのPubNub搭載アプリの背後にある本質的な概念を理解する

セットアップ

PubNubアカウントにサインアップすると、PubNubキーに無料ですぐにアクセスできます。

始める

PubNubのドキュメントは、ユースケースやSDKに関係なく、あなたを立ち上げ、実行することができます。

Top comments (0)