Facebookログインセットアップ
このプラグインのセットアップ用にインストール手順と全体のマークダウンガイドを含むコピー可能なコマンドをコピーします。
このガイドでは、Capgo Social LoginとFacebook Loginをセットアップする方法を学びます。必要なものは以下の通りです。
- A Facebook Developer Account
- アプリのパッケージ名/バンドルID
- Android用のキーハッシュを生成するためのターミナルへのアクセス
一般設定
「一般設定」のセクションFacebookアプリがまだ作成されていない場合は、以下の手順に従ってください。
-
Facebookアプリを作成する
チュートリアルに従って アプリを作成する
-
Facebookログインをアプリに追加する
Facebook Developer Dashboardで、アプリにFacebookログイン製品を追加する
-
アプリを一般公開する前に、以下の手順に従ってください。 チュートリアル 公開する
重要な情報
「重要な情報」のセクションここでは、統合に必要なキーアイテムを探すことができます。
-
CLIENT_TOKEN:
-
APP_ID:
-
APP_NAME:
Facebook Business Login
「Facebook Business Login」のセクションこのプラグインでは、ビジネス関連の機能と権限をサポートするFacebook Business Loginを使用します。ビジネスアカウントは、標準の消費者ログインの権限の他に、Instagramとページの管理を含む追加の権限を要求できます。
サポートされているビジネス権限は次のとおりです:
instagram_basic- Access to Instagram Basic Display APIinstagram_manage_insights- Instagram Insights にアクセスするpages_show_list- ページを管理する人のリストpages_read_engagement- ページからエンゲージメントデータを読み取るpages_manage_posts- ページの投稿を管理するbusiness_management- ビジネスアセットを管理する
Facebook の パーミッション リファレンス を参照してください。
全パーミッションの一覧を参照するには
- 設定の要件:
- Facebook Developer Console で Facebook アプリをビジネス アプリとして設定する必要があります。
- FacebookのBusiness Use Caseポリシーに従う必要があります。
Instagram Basic Access
「Instagram Basic Access」await SocialLogin.initialize({ facebook: { appId: 'your-business-app-id', clientToken: 'your-client-token', },});
const res = await SocialLogin.login({ provider: 'facebook', options: { permissions: [ 'email', 'public_profile', 'instagram_basic', 'pages_show_list', 'pages_read_engagement', ], },});
const profile = await SocialLogin.providerSpecificCall({ call: 'facebook#getProfile', options: { fields: ['id', 'name', 'email', 'instagram_business_account'], },});ページ管理
「ページ管理」const res = await SocialLogin.login({ provider: 'facebook', options: { permissions: [ 'email', 'pages_show_list', 'pages_manage_posts', 'pages_read_engagement', ], },});
const profile = await SocialLogin.providerSpecificCall({ call: 'facebook#getProfile', options: { fields: ['id', 'name', 'accounts{id,name,instagram_business_account}'], },});重要な注意事項:
- ビジネス用途のテストユーザーと開発アプリを使用して、ビジネスパーミッションをテストできます。
- ほとんどのビジネスパーミッションは、生産用途での使用前にFacebook App Reviewが必要です。
- ビジネスAPIには、リリース前にFacebookの現在のプラットフォームドキュメントを確認する必要があります。
- FacebookのBusiness Use Caseポリシーに従う必要があります。 Facebook Business Integration Guide アプリの設定時に
Androidの設定
「Androidの設定」-
アプリにインターネットの権限を追加してください
AndroidManifest.xmlこの行が存在することを確認してください
<uses-permission android:name="android.permission.INTERNET"/> -
Androidのキー ハッシュを生成する
Facebookのセキュリティ上の要件です。ターミナルを開いて、以下のコマンドを実行してください
ターミナル画面 keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64 -Aパスワードの入力を求められたら、以下の値を入力してください
android -
Facebookアプリにキー ハッシュを追加
- Facebook Developersでアプリのダッシュボードに移動
- 設定 > 基本設定
- 「Android」セクションまで下にスクロール
- まだ追加されていない場合は「Add Platform」をクリックして詳細を入力
- 追加したキー ハッシュを追加
- プロダクションでは、デバッグとリリースの両方のキー ハッシュを追加する必要があります
-
Facebookアカウントを更新してください
AndroidManifest.xmlに含める必要があります:<application>...<activity android:name="com.facebook.FacebookActivity"android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"android:label="@string/app_name" /><activityandroid:name="com.facebook.CustomTabActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><data android:scheme="FB[APP_ID]" /></intent-filter></activity></application>
「iOS設定」のセクション
Facebook Developer ConsoleでiOSプラットフォームを追加してください-
Facebook Developersでアプリのダッシュボードに移動してください
- __CAPGO_KEEP_0__
- 設定 > 基本設定に移動してください
- ページの下部までスクロールし、「プラットフォームを追加」をクリックしてください
- iOSを選択し、必要な情報を入力してください
-
Xcodeプロジェクトを開き、Info.plistに移動してください
-
Info.plistに次のエントリを追加してください:
<key>FacebookAppID</key><string>[APP-ID]</string><key>FacebookClientToken</key><string>[CLIENT-TOKEN]</string><key>FacebookDisplayName</key><string>[APP-NAME]</string><key>LSApplicationQueriesSchemes</key><array><string>fbapi</string><string>fb-messenger-share-api</string></array><key>CFBundleURLTypes</key><array><dict><key>CFBundleURLSchemes</key><array><string>fb[APP-ID]</string></array></dict></array> -
Facebookログインを変更する
AppDelegate.swiftimport FBSDKCoreKit@UIApplicationMainclass AppDelegate: UIResponder, UIApplicationDelegate {func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {// Override point for customization after application launch.// Initialize Facebook SDKFBSDKCoreKit.ApplicationDelegate.shared.application(application,didFinishLaunchingWithOptions: launchOptions)return true}func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {// Called when the app was launched with a url. Feel free to add additional processing here,// but if you want the App API to support tracking app url opens, make sure to keep this callif (FBSDKCoreKit.ApplicationDelegate.shared.application(app,open: url,sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String,annotation: options[UIApplication.OpenURLOptionsKey.annotation])) {return true;} else {return ApplicationDelegateProxy.shared.application(app, open: url, options: options)}}}
アプリにFacebookログインを使用する
「アプリにFacebookログインを使用する」のセクション-
アプリにFacebookログインを初期化する
import { SocialLogin } from '@capgo/capacitor-social-login';// Initialize during app startupawait SocialLogin.initialize({facebook: {appId: 'APP_ID',clientToken: 'CLIENT_TOKEN',}}) -
ログイン機能を実装する
async function loginWithFacebook() {try {const result = await SocialLogin.login({provider: 'facebook',options: {permissions: ['email', 'public_profile'],limitedLogin: false // See Limited Login section below for important details}});console.log('Facebook login result:', result);// Handle successful login} catch (error) {console.error('Facebook login error:', error);// Handle error}} -
: iOS プライバシー要件に準拠するのに役立ちます。
: iOS プライバシー要件に準拠するのに役立ちます。
async function getFacebookProfile() {try {const profileResponse = await SocialLogin.providerSpecificCall({call: 'facebook#getProfile',options: {fields: ['id', 'name', 'email', 'first_name', 'last_name', 'picture']}});console.log('Facebook profile:', profileResponse.profile);return profileResponse.profile;} catch (error) {console.error('Failed to get Facebook profile:', error);return null;}}// Example usage after loginasync function loginAndGetProfile() {const loginResult = await loginWithFacebook();if (loginResult) {const profile = await getFacebookProfile();if (profile) {console.log('User ID:', profile.id);console.log('Name:', profile.name);console.log('Email:', profile.email);console.log('Profile Picture:', profile.picture?.data?.url);}}}トークンタイプ制限: この
getProfile呼び出しは、トラッキングが許可された標準ログイン時にのみ機能します。ユーザーがトラッキングを拒否した場合、またはJWTトークンのみを使用している場合、この呼び出しは失敗します。その場合、初回ログイン応答から提供されるプロファイルデータを使用してください。 ⚠️ Critical: バックエンドトークンハンドリング バックエンドトークンハンドリングに関する重要な注意事項
危険
危険設定は無視されます。 2 つのトークンタイプ iOS ユーザーは App Tracking Transparency の選択に応じてアクセストークンまたは JWT トークンを受け取ることができますが、Android ユーザーは常にアクセストークンを受け取ります。
プラットフォームごとのトークンタイプ
プラットフォームごとのトークンタイプ| プラットフォーム | 制限付きログイン設定 | ユーザー ATT の選択 | 結果のトークンタイプ |
|---|---|---|---|
| iOS | true | どれでも | JWT トークン |
| iOS | false | トラッキングを許可する | アクセストークン |
| iOS | false | トラッキングを拒否する | JWT トークン (自動オーバーライド) |
| Android | 任意 | N/A | アクセストークン (常に) |
バックエンド実装
「バックエンド実装」のセクション-
トークンのタイプを検出して対応する
async function loginWithFacebook() {try {const loginResult = await SocialLogin.login({provider: 'facebook',options: {permissions: ['email', 'public_profile'],limitedLogin: false // iOS: depends on ATT, Android: ignored}});if (loginResult.accessToken) {// Access token (Android always, iOS when tracking allowed)return handleAccessToken(loginResult.accessToken.token);} else if (loginResult.idToken) {// JWT token (iOS only when tracking denied or limitedLogin: true)return handleJWTToken(loginResult.idToken);}} catch (error) {console.error('Facebook login error:', error);}} -
Firebase統合の例
import { OAuthProvider, FacebookAuthProvider, signInWithCredential } from 'firebase/auth';async function handleAccessToken(accessToken: string, nonce: string) {// For access tokens, use OAuthProvider (new method)const fbOAuth = new OAuthProvider("facebook.com");const credential = fbOAuth.credential({idToken: accessToken,rawNonce: nonce});try {const userResponse = await signInWithCredential(auth, credential);return userResponse;} catch (error) {console.error('Firebase OAuth error:', error);return false;}}async function handleJWTToken(jwtToken: string) {// For JWT tokens, send to your backend for validationtry {const response = await fetch('/api/auth/facebook-jwt', {method: 'POST',headers: {'Content-Type': 'application/json',},body: JSON.stringify({ jwtToken })});const result = await response.json();return result;} catch (error) {console.error('JWT validation error:', error);return false;}} -
バックエンドのJWT検証
// Backend: Validate JWT token from Facebookimport jwt from 'jsonwebtoken';import { Request, Response } from 'express';app.post('/api/auth/facebook-jwt', async (req: Request, res: Response) => {const { jwtToken } = req.body;try {// Verify JWT token with Facebook's public key// See: https://developers.facebook.com/docs/facebook-login/limited-login/token/validating/#standard-claimsconst decoded = jwt.verify(jwtToken, getFacebookPublicKey(), {algorithms: ['RS256'],audience: process.env.FACEBOOK_APP_ID,issuer: 'https://www.facebook.com' // From: https://www.facebook.com/.well-known/openid-configuration/?_rdr});// Extract user info from JWTconst userInfo = {id: decoded.sub,email: decoded.email,name: decoded.name,isJWTAuth: true};// Create your app's session/tokenconst sessionToken = createUserSession(userInfo);res.json({success: true,token: sessionToken,user: userInfo});} catch (error) {console.error('JWT validation failed:', error);res.status(401).json({ success: false, error: 'Invalid token' });}}); -
汎用バックエンドトークンハンドラー
// Handle both token types in your backendasync function authenticateFacebookUser(tokenData: any) {if (tokenData.accessToken) {// Handle access token - validate with Facebook Graph APIconst response = await fetch(`https://graph.facebook.com/me?access_token=${tokenData.accessToken}&fields=id,name,email`);const userInfo = await response.json();return {user: userInfo,tokenType: 'access_token',expiresIn: tokenData.expiresIn || 3600};} else if (tokenData.jwtToken) {// Handle JWT token - decode and validate// See: https://developers.facebook.com/docs/facebook-login/limited-login/token/validating/#standard-claimsconst decoded = jwt.verify(tokenData.jwtToken, getFacebookPublicKey());return {user: {id: decoded.sub,name: decoded.name,email: decoded.email},tokenType: 'jwt',expiresIn: decoded.exp - Math.floor(Date.now() / 1000)};} else {throw new Error('No valid token provided');}}
重要な考慮事項
「重要な考慮事項」のセクションAccess Token (Standard Login):
- ✅ Android: 常に利用可能 (iOS での制限は適用されません)
- ✅ iOS: ユーザーがアプリトラッキングを明示的に許可する場合のみ
- ✅ Can be used to access Facebook Graph API
- ✅ 長期の有効期限
- ✅ 利用可能なユーザー情報が多くなります
- ❌ iOS で使用されることが減っています ユーザーがトラッキングを拒否することが増えています
JWT トークン (iOS のみのプライバシー モード):
- ❌ Android: これは発生しません (サポートされていません)
- ✅ iOS: トラッキングが拒否されたり、または
limitedLogin: true - ✅ iOS ユーザーのプライバシー設定を尊重します
- ❌ 基本的なユーザー情報のみが含まれます
- ❌ 短い有効期限
- ❌ No access to Facebook Graph API
- ⚠️ iOS ユーザーの最も一般的なシナリオ
プラットフォーム固有の動作:
- iOS アプリ: アクセストークンとJWTトークン両方を処理する必要があります
- Android アプリ: アクセストークンを処理するだけで済みます
- クロスプラットフォーム アプリ: 両方のトークン処理方法を実装する必要があります
Webのセキュアコンテキスト要件 (Capacitor)
セクション「Webのセキュアコンテキスト要件 (Capacitor)」暗号化 API の制限事項
セクション「暗号化 API の制限事項」更新されたFacebookログインフローには、 Webの暗号化 API nonceの生成に使用されるため、 セキュアコンテキスト:
// This requires secure context (HTTPS or localhost)async function sha256(message: string) { const msgBuffer = new TextEncoder().encode(message); const hashBuffer = await crypto.subtle.digest("SHA-256", msgBuffer); // ❌ Fails in insecure context // ...}開発環境の問題
開発環境の問題一般的な問題: ionic serve HTTP URLの問題はFacebookの認証を破壊します
| 環境 | 暗号化 API 利用可能 | Facebookログインが正常に動作する |
|---|---|---|
http://localhost:3000 | ✅ はい | ✅ はい |
http://127.0.0.1:3000 | ✅ はい | ✅ はい |
http://192.168.1.100:3000 | ❌ いいえ | ❌ いいえ |
https://any-domain.com | ✅ はい | ✅ はい |
Capacitor 開発のためのソリューション
「Capacitor 開発のためのソリューション」-
ローカルホストでWebテスト
ターミナル画面 # Instead of ionic serve --host=0.0.0.0ionic serve --host=localhost -
IonicでHTTPSを有効
ターミナル画面 ionic serve --ssl -
実機でテスト
ターミナル画面 # Capacitor apps run in secure context on devicesionic cap run iosionic cap run android -
開発用の代替ノンス生成
async function generateNonce() {if (typeof crypto !== 'undefined' && crypto.subtle) {// Secure context - use crypto.subtlereturn await sha256(Math.random().toString(36).substring(2, 10));} else {// Fallback for development (not secure for production)console.warn('Using fallback nonce - not secure for production');return btoa(Math.random().toString(36).substring(2, 10));}}
ファイアベースの統合注意
セクション「ファイアベースの統合注意」最近のファイアベースのドキュメントでは、Facebook認証にJWTトークンとノンスが必要であり、ログイン設定に関係なく、Facebook認証に必要です。このアプローチは、両方の limitedLogin: true かつ limitedLogin: false:
// Both modes can return JWT tokens depending on user choice const loginResult = await SocialLogin.login({ provider: 'facebook', options: { permissions: ['email', 'public_profile'], limitedLogin: false, // true = always JWT, false = depends on user tracking choice nonce: nonce } });開発の制限: ローカルホストでないネットワークIPを使用している場合、Facebookログインは暗号化 __CAPGO_KEEP_0__ 制限により失敗します。ローカルホストまたはHTTPSを使用してWebテストを行ってください。 ionic serve on a network IP (not localhost), Facebook login will fail due to crypto API restrictions. Use localhost or HTTPS for web testing.
トラブルシューティング
トラブルシューティングよくある問題と解決策
よくある問題と解決策-
Androidにおけるキー ハッシュ エラー
- Facebook ダッシュボードに正しいキー ハッシュを追加していることを確認してください
- リリース ビルドの場合、デバッグ用とリリース用の両方のキー ハッシュを追加してください
- 正しいキーストアを使用していることを確認してください
-
Facebook ログイン ボタンが表示されない
- すべてのマニフェストエントリが正しいことを確認する
- Facebook App ID と Client Token が正しいことを確認する
- 適切に SDK を初期化していることを確認する
-
iOS の一般的な問題
- すべての Info.plist エントリが正しいことを確認する
- URL スキームが適切に設定されていることを確認する
- Facebook ダッシュボードで登録されている bundle ID と一致していることを確認する
-
テストする前に、Facebook Developer Console でテストユーザーを追加する
- ロール > テストユーザーに移動する
- テストユーザーを作成する
- テスト用のクレデンシャルを使用してください
-
デバッグとリリースの両方のビルドをテストしてください
- デバッグ用のキー ハッシュを使用したデバッグ ビルド
- リリース用のキー ハッシュを使用したリリース ビルド
- エミュレータと物理デバイスの両方でテストしてください
ログインフローを完全にテストすることを忘れないでください、含む:
- 正常なログイン
- ログインのキャンセル
- エラー処理
- ログアウト機能
Facebook ログイン設定から続けてください
「Facebook ログイン設定から続けてください」のセクションFacebookログインを使用している場合 Facebookログインの設定 認証とアカウントフローの計画を行うには、Facebookログインを接続します。 Capacitorを使用して、@capgo/capacitor-social-login Capacitorを使用して、@capgo/capacitor-social-login Capacitorを使用して、@capgo/capacitor-social-login Capacitorを使用して、@capgo/capacitor-passkey Capacitorを使用して、@capgo/capacitor-passkey Capacitorを使用して、@capgo/capacitor-native-biometric Capacitorを使用して、@capgo/capacitor-native-biometric for the implementation detail in @capgo/capacitor-native-biometric, and 認証とアカウントフローの計画を行うには、Facebookログインを接続します。 2要素認証の実装詳細について。