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.initializeWithSite
で KiiSite.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.initializeWithSite
で KiiSite.US
向けに Kii
を初期化しています。この初期化により生成された KiiApplication
インスタンスは、デフォルトとして適用されます。2行目の KiiUser.authenticate
による myusername
のユーザログイン処理と3行目の listTopics
の処理はこのインスタンスで実行されます。結果として、3行目ではユーザが購読可能なトピック一覧が返されます。
5行目の Kii.authenticateAsAppAdmin
ではアプリ管理者のコンテキストを生成し、6行目の getApp()
でこのコンテキストより KiiApplication
インスタンスを抽出しています。7行目の listTopics
はこのインスタンスで実行されるため、アプリ管理者が購読可能なトピック一覧、すなわち存在する全トピック一覧が返されます。