메인 콘텐츠로 바로가기
튜토리얼

Capacitor 소셜 로그인 플러그인과 Supabase 인증을 설정하는 방법

Learn how to integrate Supabase authentication with the Capgo Social Login plugin for seamless Google, Apple, and Facebook authentication in your Capacitor app.

__CAPGO_KEEP_0__ 소셜 로그인 플러그인과 Supabase 인증을 설정하는 방법

__CAPGO_KEEP_0__ 소셜 로그인 플러그인과 Supabase 인증을 설정하는 방법

__CAPGO_KEEP_0__ 소셜 로그인 플러그인과 Supabase 인증을 설정하는 방법

Setup Supabase Authentication with Capacitor Social Login Plugin

모바일 앱에서 인증을 설정하는 것은 복잡할 수 있지만 SupabaseCapgo Social Login 플러그인 makes it straightforward. This tutorial will guide you through integrating social authentication (Google, Apple, Facebook) with Supabase in your Capacitor app.

__CAPGO_KEEP_0__

앱에서 Supabase @capgo/capacitor-social-login __CAPGO_KEEP_0__

  • 에서 소셜 인증 (Google, Apple, Facebook)과
  • Supabase
  • 다양한 플랫폼 호환성
  • 실시간 데이터베이스 통합
  • 내장된 사용자 관리

사전 요구 사항

시작하기 전에, 다음을 확인하세요:

  • Capacitor 프로젝트를 설정했습니다.
  • Supabase 계정 및 프로젝트
  • 선택한 사회 공급자 (Google, Apple, Facebook) 의 개발자 계정

Step 1: Social Login 플러그인을 설치 및 구성

먼저 Capgo Social Login 플러그인을 설치하세요:

npm install @capgo/capacitor-social-login
npx cap sync

Step 2: Supabase 프로젝트 설정

Supabase 프로젝트를 생성 및 구성하세요

  1. 프로젝트를 만들기 위해 Supabase 프로젝트를 생성하세요:

    • 로 이동하세요 supabase.com 회원가입/로그인하세요
    • 클릭하세요 “새 프로젝트”
    • 회사 선택
    • 프로젝트 이름을 입력하세요 (예: “MyApp Auth”) 데이터베이스 비밀번호를 설정하세요
    • 데이터베이스 비밀번호를 설정하세요 데이터베이스 비밀번호를 설정하세요 (이 보안을 안전하게 저장하세요)
    • Select your 지역 (가장 가까운 사용자에게 가장 가까운 것을 선택하세요)
    • Click “Create new project”
  2. 프로젝트 인증서를 받으세요:

    • 프로젝트가 생성되면 설정 > API
    • 프로젝트 URL을 복사하세요 (예를 들어, (e.g., https://your-project-ref.supabase.co)
    • __CAPGO_KEEP_0__ 키 복사하기 공개 키 API 키
    • 앱에서 나중에 사용하기 위해 저장하세요

인증 설정

  1. 일반 인증 설정:

    • 바로 가기 인증 > 설정
    • 설정 일반 설정:
      • 설정 사이트 URL To your app의 URL (예: https://yourdomain.com 또는 http://localhost:3000 개발을 위해
      • 추가 Redirect URL 필요한 경우:
        http://localhost:3000
        https://yourdomain.com
        capacitor://localhost (for mobile apps)
  2. 이메일 설정 (선택적이지만 권장되는):

    • 아래 SMTP 설정, 이메일 제공업체를 구성하여
    • 이메일 확인 및 비밀번호 초기화가 가능합니다.
    • 개발을 위해 내장된 이메일 서비스를 사용할 수 있습니다.

인증 제공자 사회 서비스를 활성화하세요.

  1. 제공자 섹션에 접근하세요.:
    • Authentication > Providers로 이동하세요. Supabase 대시보드에서 사용 가능한 사회 제공자가 목록으로 나타납니다.
    • 각 제공자는
    • Enable 활성화 및 구성 옵션을 가지고 있습니다. 각 사회 제공자를 자세히 구성해 보겠습니다.

Step 3: Supabase에서 사회 제공자를 구성하세요.

Step 3: Supabase에서 사회 제공자를 구성하세요.

구글 인증을 Supabase에 설정하는 방법

먼저 Google OAuth 인증서를 받으세요:

구글 설정 가이드를 따라하세요: 구글 인증 설정

이 가이드는 다음과 같은 내용을 다룹니다:

  • Google Cloud 프로젝트를 생성하는 방법
  • 웹, iOS, Android를 위한 OAuth 2.0 인증서를 설정하는 방법
  • consent 화면을 설정하는 방법
  • 필요한 Client ID와 비밀번호를 받는 방법

구글 설정을 완료한 후 Supabase에서 설정하세요:

  1. Supabase에서 Google 제공자를 활성화하세요::
    • Supabase 대시보드에서 '설정'을 클릭하세요: 인증 > 제공자
    • 찾기 Google 그리고 toggle ON
    • 구성 정보를 채우세요:
      • Client ID : Google OAuth Web Client ID (Google Cloud Console에서)
      • Client Secret : Google OAuth 클라이언트 비밀번호
      • 리다이렉트 URL: https://your-project-ref.supabase.co/auth/v1/callback (자동 채우기)
    • 클릭 “저장”

중요: 사용자 웹 클라이언트 ID웹 클라이언트 비밀번호 Supabase 에서 사용하세요. 모바일 앱을 개발하는 경우에도.

Apple 인증을 위한 Supabase 설정

Apple 인증을 사용하려면 다음 단계를 따르세요.

Apple 인증을 설정하는 방법에 대한 자세한 설명은 이 문서에서 확인할 수 있습니다. Apple 인증 설정

이 문서에서는 다음 항목에 대해 설명합니다.

  • Apple 개발자 계정 설정
  • App ID 및 Service ID 생성
  • Apple 인증을 사용하는 기능을 설정하는 방법
  • Apple 인증을 사용하려면 필요한 개인 키를 생성해야 합니다.
  • iOS, Android, 및 Web 플랫폼에 대한 Apple 인증 설정

Apple 인증을 설정한 후 Supabase에서 설정을 완료하세요.

  1. Supabase에서 Apple 인증 제공자를 활성화하세요.:
    • Capgo로 이동 인증 > 제공자 그리고 토글 애플 켜기
    • 구성 정보를 입력하세요:
      • 클라이언트 ID: 서비스 ID 식별자 (예: com.yourapp.signin)
      • 클라이언트 시크릿: 애플 프라이빗 키를 사용하여 JWT를 생성하세요 (see Supabase Apple 문서 에 JWT 형식에 대한 자세한 내용을 참조하세요
      • 리다이렉트 URL: https://your-project-ref.supabase.co/auth/v1/callback (자동으로 입력됨)
    • 클릭 “저장”

주의: Apple 인증은 서비스 ID, 개인 키 및 JWT 생성을 위한 Apple의 요구 사항으로 인해 가장 복잡합니다. 각 플랫폼에 대한 문서를 신중히 따르세요.

Supabase에서 Facebook 인증 설정하기

Facebook 인증을 위한 자격 증명 획득:

다음과 같이 Facebook 인증 설정을 완전히 설정하세요: Facebook 인증 설정

이 안내서에는 다음 항목이 포함됩니다.

  • Facebook 개발자 계정 및 앱 만들기
  • __CAPGO_KEEP_0__ 제품을 Facebook 로그인으로 추가합니다.
  • __CAPGO_KEEP_0__에서 OAuth 리다이렉션 URI를 구성합니다.
  • __CAPGO_KEEP_0__에서 앱 ID, 앱 시크릿, 클라이언트 토큰을 가져옵니다.
  • iOS 및 Android를 위한 플랫폼별 구성

Facebook 설정을 완료한 후 Supabase에서 구성하십시오.

  1. Supabase에서 Facebook 제공자를 활성화하십시오.:
    • __CAPGO_KEEP_0__으로 이동하십시오. 인증 > 제공자 Facebook 제공자를 활성화/비활성화하십시오. Facebook ON을 클릭하십시오. 구성 정보를 입력하십시오.
    • __CAPGO_KEEP_0__
      • 클라이언트 ID: Facebook 앱 ID
      • 클라이언트 시크릿: Facebook 앱 시크릿
      • 리다이렉트 URL: https://your-project-ref.supabase.co/auth/v1/callback (자동 채우기)
    • 클릭 “저장”

중요: Facebook 앱에 Supabase callback URL (https://your-project-ref.supabase.co/auth/v1/callback)을 추가하십시오. : Facebook 앱의 Valid OAuth Redirect URIs에 __CAPGO_KEEP_0__

Facebook 로그인 설정에서 중요합니다.

Row Level Security (RLS):

  • 인증 후 테이블에 RLS를 활성화하세요.
  • __CAPGO_KEEP_1__ > __CAPGO_KEEP_2__ __CAPGO_KEEP_3__ __CAPGO_KEEP_4__ __CAPGO_KEEP_5__ __CAPGO_KEEP_6__
  • __CAPGO_KEEP_7__

__CAPGO_KEEP_8__

  • __CAPGO_KEEP_9__ 인증 > 사용자
  • 인증 이벤트를 모니터링하세요. 인증 > 로그
  • 이메일 템플릿을 설정하세요. 인증 > 이메일 템플릿

설정 테스트:

  • Supabase의 내장 인증 테스트 도구를 사용하세요.
  • 인증 > 사용자 에서 ‘사용자 초대’ 을 클릭하여 이메일 흐름을 테스트하세요.
  • 인증 오류를 확인하려면 로그 섹션을 확인하세요 로그 원본 제공자( Supabase가 아닌)에서 OAuth 인증서를 제공해야 합니다.

Step 4: Social Login 플러그인을 구성하십시오

Supabase가 구성되면 Social Login 플러그인을 구성해야 합니다. 중요: 플러그인은 OAuth 인증서를 원본 제공자( Supabase가 아닌)에서 제공해야 하며, Supabase는 서버 측 인증을 처리합니다. 인증 흐름 구성하기 전에 흐름을 이해하십시오:

플러그인은

플러그인은

  1. 플러그인은 소셜 제공자 (Google/Apple/Facebook)와 natively
  2. 플러그인은 토큰을 받습니다 (액세스 토큰, ID 토큰) 제공자로부터
  3. 앱은 이러한 토큰을 Supabase에 전송합니다 signInWithIdToken()
  4. Supabase는 제공자와 토큰을 검증하고 사용자 세션을 생성합니다
  5. Supabase는 앱의 인증된 요청에 대한

자체 JWT 토큰을 반환합니다

Google 플러그인 구성 플러그인은 다음을 필요로합니다: Web Client ID 모든 플랫폼에 대해 옵션적으로 iOS Client ID iOS 전용 기능에 대해:

import { SocialLogin } from '@capgo/capacitor-social-login';

await SocialLogin.initialize({
  google: {
    // Use the same Web Client ID you configured in Supabase
    webClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com',
    
    // Optional: iOS Client ID for iOS-specific features
    iOSClientId: 'YOUR_IOS_CLIENT_ID.apps.googleusercontent.com',
    
    // Optional: Request offline access for refresh tokens
    mode: 'offline'
  }
});

Google에 대한 주요 점:

  • Web Client ID (Android/iOS Client ID가 아닌) 필드 webClientId Web Client ID만으로도 모든 플랫폼에서 플러그인을 사용할 수 있습니다.
  • The
  • iOS 전용 Google 기능에만 사용되는 옵션입니다. iOSClientId Apple 플러그인 구성 설정

iOS 전용 Google 기능에만 사용됩니다.

iOS와 Android의 Apple 설정이 다릅니다.:

iOS (네이티브 애플 로그인):

await SocialLogin.initialize({
  apple: {
    // No additional configuration needed for iOS
    // The plugin uses the native Apple Sign-In capability
  }
});

Android/Web (서비스 ID가 필요합니다):

await SocialLogin.initialize({
  apple: {
    clientId: 'YOUR_SERVICE_ID', // The Service ID from Apple Developer Portal
    redirectUrl: 'https://your-project-ref.supabase.co/auth/v1/callback'
  }
});

애플의 주요 점:

  • iOS는 네이티브 Sign in with Apple (추가 설정이 필요하지 않습니다)를 사용합니다.
  • Android/Web는 애플 개발자 포털에서 생성한 서비스 ID가 필요합니다.
  • The redirectUrl 이것은 Apple 개발자 포털과 Supabase에서 모두 구성한 것과 일치해야합니다.

Facebook 플러그인 구성

Facebook는 App ID와 Client Token이 필요합니다:

await SocialLogin.initialize({
  facebook: {
    appId: 'YOUR_FACEBOOK_APP_ID',        // From Facebook Developer Dashboard
    clientToken: 'YOUR_FACEBOOK_CLIENT_TOKEN', // From Facebook Developer Dashboard
    
    // Optional: Use Facebook Limited Login (for enhanced privacy)
    limitedLogin: false // See our Facebook setup guide for important Limited Login details
  }
});

Facebook에 대한 주요 점들:

  • Supabase에서 설정한 동일한 App ID를 사용하세요
  • Client Token은 Facebook App의 기본 설정에서 찾을 수 있습니다
  • limitedLogin: true iOS에서만 Facebook의 개인 정보 보호에 초점을 맞춘 Limited Login 기능을 활성화합니다
  • 중요자세한 Limited Login 정보, ATT 고려 사항을 포함하여 설명서를 참조하세요 Facebook 설정

모든 제공자 초기화를 완료하세요

이것은 모든 제공자를 함께 초기화하는 방법입니다

import { SocialLogin } from '@capgo/capacitor-social-login';

export async function initializeSocialLogin() {
  await SocialLogin.initialize({
    google: {
      webClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com',
      mode: 'offline'
    },
    facebook: {
      appId: 'YOUR_FACEBOOK_APP_ID',
      clientToken: 'YOUR_FACEBOOK_CLIENT_TOKEN',
    },
    apple: {
      // iOS: no config needed
      // Android/Web: uncomment the lines below
      // clientId: 'YOUR_SERVICE_ID',
      // redirectUrl: 'https://your-project-ref.supabase.co/auth/v1/callback'
    }
  });
}

중요한 주의 사항:

  • 호출 initialize() __CAPGO_KEEP_0__ __CAPGO_KEEP_1__
  • __CAPGO_KEEP_2__
  • __CAPGO_KEEP_3__ __CAPGO_KEEP_4____CAPGO_KEEP_5__
  • __CAPGO_KEEP_6__

__CAPGO_KEEP_7__

__CAPGO_KEEP_8__

npm install @supabase/supabase-js

__CAPGO_KEEP_9__

// services/supabase.ts
import { createClient } from '@supabase/supabase-js';

const supabaseUrl = 'https://your-project-ref.supabase.co';
const supabaseKey = 'your-anon-public-key';

export const supabase = createClient(supabaseUrl, supabaseKey, {
  auth: {
    autoRefreshToken: true,
    persistSession: true,
    detectSessionInUrl: false,
  },
});

__CAPGO_KEEP_10__

__CAPGO_KEEP_11__

// services/auth.ts
import { SocialLogin } from '@capgo/capacitor-social-login';
import { supabase } from './supabase';

export class AuthService {
  
  async initializeSocialLogin() {
    await SocialLogin.initialize({
      google: {
        webClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com',
      },
      facebook: {
        appId: 'YOUR_FACEBOOK_APP_ID',
        clientToken: 'YOUR_FACEBOOK_CLIENT_TOKEN',
      },
      apple: {} // iOS configuration
    });
  }

  async signInWithGoogle() {
    try {
      const result = await SocialLogin.login({
        provider: 'google',
        options: {
          scopes: ['email', 'profile']
        }
      });

      const googleResult = result.result;
      if (!googleResult) {
        throw new Error('Google login failed');
      }

      // GoogleLoginResponse is a union type - check responseType to determine flow
      if (googleResult.responseType === 'online') {
        // Online mode: use idToken directly with Supabase
        const { data, error } = await supabase.auth.signInWithIdToken({
          provider: 'google',
          token: googleResult.idToken!,
        });
        if (error) throw error;
        return data;
      } else {
        // Offline mode: exchange serverAuthCode on your backend
        // Your backend should exchange the code for tokens and create a Supabase session
        const response = await fetch('/api/auth/google', {
          method: 'POST',
          headers: { 'Content-Type': 'application/json' },
          body: JSON.stringify({ serverAuthCode: googleResult.serverAuthCode })
        });
        return response.json();
      }
    } catch (error) {
      console.error('Google sign-in error:', error);
      throw error;
    }
  }

  async signInWithApple() {
    try {
      const result = await SocialLogin.login({
        provider: 'apple',
        options: {
          scopes: ['email', 'name']
        }
      });

      const { data, error } = await supabase.auth.signInWithIdToken({
        provider: 'apple',
        token: result.result?.identityToken!,
      });

      if (error) throw error;
      return data;
    } catch (error) {
      console.error('Apple sign-in error:', error);
      throw error;
    }
  }

  async signInWithFacebook() {
    try {
      const result = await SocialLogin.login({
        provider: 'facebook',
        options: {
          permissions: ['email', 'public_profile']
        }
      });

      const fbResult = result.result;
      if (!fbResult?.accessToken?.token) {
        throw new Error('Facebook login failed - no access token received');
      }

      // Facebook uses accessToken for Supabase authentication
      const { data, error } = await supabase.auth.signInWithIdToken({
        provider: 'facebook',
        token: fbResult.accessToken.token,
      });

      if (error) throw error;
      return data;
    } catch (error) {
      console.error('Facebook sign-in error:', error);
      throw error;
    }
  }

  async signOut() {
    // Sign out from Supabase
    await supabase.auth.signOut();
    
    // Optionally sign out from social providers
    await SocialLogin.logout({
      provider: 'google' // or 'apple', 'facebook'
    });
  }

  getCurrentUser() {
    return supabase.auth.getUser();
  }

  onAuthStateChange(callback: (event: string, session: any) => void) {
    return supabase.auth.onAuthStateChange(callback);
  }
}

export const authService = new AuthService();

Step 7: 앱에 구현하기

서비스를 초기화하고 인증을 처리하십시오:

// main.ts or app component
import { authService } from './services/auth';

async function initializeApp() {
  await authService.initializeSocialLogin();
  
  // Listen to auth state changes
  authService.onAuthStateChange((event, session) => {
    if (event === 'SIGNED_IN') {
      console.log('User signed in:', session.user);
      // Redirect to authenticated area
    } else if (event === 'SIGNED_OUT') {
      console.log('User signed out');
      // Redirect to login
    }
  });
}

initializeApp();

로그인 버튼을 UI에 생성하십시오:

// Login component
async function handleGoogleLogin() {
  try {
    const user = await authService.signInWithGoogle();
    console.log('Signed in with Google:', user);
  } catch (error) {
    console.error('Login failed:', error);
  }
}

async function handleAppleLogin() {
  try {
    const user = await authService.signInWithApple();
    console.log('Signed in with Apple:', user);
  } catch (error) {
    console.error('Login failed:', error);
  }
}

async function handleFacebookLogin() {
  try {
    const user = await authService.signInWithFacebook();
    console.log('Signed in with Facebook:', user);
  } catch (error) {
    console.error('Login failed:', error);
  }
}

async function handleLogout() {
  try {
    await authService.signOut();
    console.log('Signed out successfully');
  } catch (error) {
    console.error('Logout failed:', error);
  }
}

Step 8: 플랫폼별 설정

iOS 설정

iOS 세부 설정 지침을 보려면 플랫폼별 지침을 참조하십시오:

빠른 요약 - 추가 ios/App/App/Info.plist:

<!-- Google Sign-In URL scheme -->
<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>YOUR_REVERSED_CLIENT_ID</string>
    </array>
  </dict>
</array>

<!-- Apple Sign-In capability -->
<key>com.apple.developer.applesignin</key>
<array>
  <string>Default</string>
</array>

iOS 설정을 완전히 구성하기 위한 링크된 안내서를 따르세요. Xcode 프로젝트 설정 포함.

Android 설정

Android 설정을 완전히 구성하기 위한 자세한 안내서는 플랫폼별 안내서를 참조하세요.

Android 기본 설정:

1. SHA-1 지문 가져오기 (Google에 필요합니다.)

# For debug builds (development)
cd android
./gradlew signingReport

# Look for the SHA1 fingerprint under "Variant: debug"
# Add this SHA1 to your Google Cloud Console Android OAuth client

2. AndroidManifest.xml 구성 - 추가 android/app/src/main/AndroidManifest.xml:

<!-- Internet permission -->
<uses-permission android:name="android.permission.INTERNET" />

<!-- Facebook configuration -->
<meta-data 
  android:name="com.facebook.sdk.ApplicationId" 
  android:value="@string/facebook_app_id"/>
<meta-data 
  android:name="com.facebook.sdk.ClientToken" 
  android:value="@string/facebook_client_token"/>

3. Facebook 리소스 추가android/app/src/main/res/values/strings.xml:

<string name="facebook_app_id">YOUR_FACEBOOK_APP_ID</string>
<string name="facebook_client_token">YOUR_FACEBOOK_CLIENT_TOKEN</string>

Android 구성에 대한 자세한 지침은 Google Play Services 설정 및 패키지 이름 구성과 같은 링크된 플랫폼 지침을 따르십시오.

9단계: 인증된 사용자와 함께 Supabase 데이터베이스 사용

사용자가 인증되면, 사용자 인증 후 Supabase의 데이터베이스를 사용할 수 있습니다. Row Level Security (RLS)도 사용할 수 있습니다.

// Example: Fetch user profile
async function getUserProfile() {
  const { data: user } = await supabase.auth.getUser();
  
  if (user) {
    const { data, error } = await supabase
      .from('profiles')
      .select('*')
      .eq('id', user.user.id)
      .single();
    
    return data;
  }
}

// Example: Update user profile
async function updateUserProfile(updates: any) {
  const { data: user } = await supabase.auth.getUser();
  
  if (user) {
    const { data, error } = await supabase
      .from('profiles')
      .update(updates)
      .eq('id', user.user.id);
    
    return data;
  }
}

중요한 보안 고려 사항

  1. sensitive 키를 __CAPGO_KEEP_0__에 노출하지 마세요 클라이언트 code에서 환경 변수를 사용하세요
  2. 설정에 사용하세요 Supabase에서 Row Level Security를 활성화하세요
  3. backend에서 토큰을 검증하세요 토큰 갱신을 Supabase에서 자동으로 처리하세요
  4. 일반적인 문제 해결 토큰 일치 오류 해결
  5. Token Mismatch Errors Token Mismatch Errors

Token Mismatch Errors

Token Mismatch Errors

  • OAuth 제공자 구성이 사회 로그인 플러그인과 Supabase 간에 일치하는지 확인하세요.
  • 리다이렉트 URL이 올바르게 구성되어 있는지 확인하세요.

플랫폼별 문제

  • iOS: Apple Developer 구성과 일치하는 Bundle ID를 확인하세요.
  • Android: Google Console에 올바르게 SHA1 지문을 추가했는지 확인하세요.

인증 흐름 중단

  • 네트워크 문제에 대한 적절한 오류 처리를 구현하세요.
  • 인증 중 로딩 상태를 추가하세요.

결론

Supabase의 강력한 백엔드와 네이티브 사회 로그인 기능을 결합한 완전한 인증 시스템을 구축했습니다. 이 설정은 다음을 제공합니다.

  • 보안적인 네이티브 사회 인증
  • 무결점의 토큰 관리
  • 실시간 데이터베이스 통합
  • 플랫폼 간 호환성

Supabase와 Capgo Social Login 플러그인을 결합하면 Capacitor 앱에 강력하고 확장 가능한 인증 솔루션을 제공합니다.

더 많은 고급 기능을 사용하려면 2단계 인증 또는 사용자 지정 클레임을 확인하세요. Supabase 문서Social Login 플러그인 문서.

Setup Supabase Authentication with Capacitor Social Login Plugin에서 계속 진행하세요.

만약에 사용 중이라면 Capgo에서 Supabase 인증을 Capacitor 소셜 로그인 플러그인과 함께 설정합니다. __CAPGO_KEEP_0__ 소셜 로그인 플러그인을 인증과 계정 흐름을 계획하고 연결하는 데 사용합니다. capgo/capacitor-social-login capgo/capacitor-social-login의 구현 세부 정보를 참조하세요. capgo/capacitor-passkey capgo/capacitor-passkey의 구현 세부 정보를 참조하세요. capgo/capacitor-native-biometric capgo/capacitor-native-biometric의 구현 세부 정보를 참조하세요. 두 단계 인증 두 단계 인증의 구현 세부 정보를 참조하세요. SSO (기업) __CAPGO_KEEP_0__ (기업)에서 SSO 구현 세부 정보에 대해.

Capacitor 앱에 대한 실시간 업데이트

웹层 버그가 활성화된 경우, 앱 스토어 승인까지 며칠 기다리지 않고 Capgo를 통해 버그를 수정하세요. 사용자는 배경에서 업데이트를 받으면서 네이티브 변경 사항은 일반적인 검토 경로를 유지합니다.

시작하기

블로그에서 최신 뉴스

Capgo는 전문적인 모바일 앱을 만들기 위해 필요한 최고의洞察력을 제공합니다.