KiiApplication の利用 (v3 系のみ)

Kii Cloud SDK for JavaScript v3 系では、新たに KiiApplication が導入されています。

KiiApplication を使うと、以下の機能が利用できます。

複数のアプリの同時利用

SDK で複数のアプリを同時に使い分けることができます。次の例では、usApp アプリの KiiObject を jpApp アプリにコピーしています。

// Assume myBucket and object xxxx is already registered.
const usApp = Kii.initializeWithSite("my-app-id1", "my-app-key1", KiiSite.US);
// If no app is injected, the app in which Kii.initializeWithSite() will be used.
// i.e. In this case, usApp will be used.
const bucketUS = Kii.bucketWithName("myBucket");
KiiObject.objectWithURI("kiicloud://buckets/myBucket/objects/xxxx").refresh().then((obj1) => {
  // create a separate app
  const jpApp = new KiiApplication("my-app-id2", "my-app-key2", KiiSite.JP);
  // Assume a myBucket and object yyyy is already registered.
  const bucketJP = jpApp.bucketWithName("myBucket");
  // Inject the jpApp while creating a object, so that this object will be created on jpApp.
  const obj2 = KiiObject.objectWithURI("kiicloud://buckets/myBucket/objects/yyyy", jpApp);
  obj1.getKeys().forEach((key) => {
    obj2.set(key, obj1.get(key));
  });
  // authenticate in jpApp to write the object
  return usApp.authenticate("myusername", "mypassword", jpApp).then(() => {
    return obj2.save();
  });
});

1行目の Kii.initializeWithSiteKiiSite.US 向けに Kii を初期化しています。この初期化により生成された KiiApplication インスタンスは、デフォルトとして適用されます。このため、2行目の Kii.bucketWithName と3行目の KiiObject.objectWithURI は、1行目で指定した KiiSite.US のアプリに対して適用されます。

KiiApplication を使うと、デフォルトのものとは別の KiiApplication インスタンスを生成できます。4行目では、KiiApplication を用いて KiiSite.JP のアプリ用のインスタンスを生成しています。5行目の bucketWithName と6行目の KiiObject.objectWithURI はこのインスタンスを指定して実行しているため、それぞれの操作は KiiSite.JP のアプリに対して適用されます。

複数ユーザによる同時ログイン対応

SDK で複数ユーザによる同時ログインに対応できます。次の例では、通常のユーザカウアンとと管理用アカウントを使い分けています。

const userApp = Kii.initializeWithSite("my-app-id", "my-app-key", KiiSite.US);
// authenticate as a normal user. Now the userApp & the default app works as a user context.
KiiUser.authenticate("myusername", "mypassword").then((user) => {
  // get a list of topics that the user can subscribe.
  return userApp.listTopics().then((userTopics) => {
    console.log(userTopics);
  });
});

// login as an app admin. This does not affect the user / userApp above.
Kii.authenticateAsAppAdmin("your client id", "your client secret").then((adminContext) => {
  // this app has an admin context.
  const adminApp = adminContext.getApp();
  // get a full list of topics.
  return adminApp.listTopics().then((allTopics) => {
    console.log(allTopics);
  });
});

1行目の Kii.initializeWithSiteKiiSite.US 向けに Kii を初期化しています。この初期化により生成された KiiApplication インスタンスは、デフォルトとして適用されます。2行目の KiiUser.authenticate による myusername のユーザログイン処理と3行目の listTopics の処理はこのインスタンスで実行されます。結果として、3行目ではユーザが購読可能なトピック一覧が返されます。

5行目の Kii.authenticateAsAppAdmin ではアプリ管理者のコンテキストを生成し、6行目の getApp() でこのコンテキストより KiiApplication インスタンスを抽出しています。7行目の listTopics はこのインスタンスで実行されるため、アプリ管理者が購読可能なトピック一覧、すなわち存在する全トピック一覧が返されます。