本文へ移動
rdlabo.dev

認証

認証メソッドを使用する前に設定を完了してください。

プラットフォームごとの動作

Method Android iOS Web
login 対応 既定でLimited Login 対応
logout 対応 対応 対応
reauthorize 対応 対応 未実装
getCurrentAccessToken 対応 Limited Login token 対応
getProfile 対応 Graph tokenが必要 対応

tracking login optionはiOS専用で、既定値はlimitedです。Limited Loginでは、iOSはGraph API access tokenではなくOIDC authentication token(JWT)を返します。現在のプラグインはtracking: 'enabled'で取得したGraph access tokenを返しません。

nonce optionはAndroidとiOSで使用され、Webでは無視されます。raw nonceを渡してください。ネイティブ実装がFacebook SDKへ渡す前にhash化します。

ログイン

アプリが使用する権限だけをリクエストします。

import { FacebookLogin } from '@capacitor-community/facebook-login';

const result = await FacebookLogin.login({
  permissions: ['email', 'user_birthday'],
});

if (result.accessToken) {
  console.log(`Facebook token: ${result.accessToken.token}`);
} else {
  // No token was returned by the native platform.
}

WebではFacebookが使用可能なtokenを返さない場合にrejectします。AndroidとiOSではログインをキャンセルするとtokenなしでresolveします。

iOSのtracking modeとnonce

const result = await FacebookLogin.login({
  permissions: ['email'],
  tracking: 'limited',
  nonce: crypto.randomUUID(),
});

Limited Login tokenはbackendでOIDC tokenとして検証してください。Graph API access tokenとして扱わないでください。

現在のtoken

const result = await FacebookLogin.getCurrentAccessToken();

if (result.accessToken) {
  console.log(`Current Facebook token: ${result.accessToken.token}`);
}

ログアウト中、ネイティブプラットフォームはtokenなしでresolveします。WebはFacebook sessionが接続されていない場合にrejectします。

プロフィール項目

const profile = await FacebookLogin.getProfile<{
  id: string;
  email?: string;
}>({ fields: ['id', 'email'] });

項目はMetaアプリで許可され、ユーザーから権限を付与されている必要があります。返されるobjectにはGraph APIが返した項目だけが含まれます。iOSではGraph access tokenが必要であり、既定のLimited Login tokenでは動作しません。

データアクセスの再認証

再認証はAndroidとiOSでのみ利用できます。

const result = await FacebookLogin.reauthorize();

if (result.accessToken) {
  console.log('Data access was renewed.');
}

ログアウト

await FacebookLogin.logout();

ログアウトすると、プラットフォームSDKが管理するFacebook sessionが消去されます。