> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 移动 SDK 设置

> 为 Android、iOS、Huawei 以及 React Native、Flutter、Unity 等跨平台框架设置 OneSignal SDK。

export const SdkReleasesIframe = ({sdkFilter = undefined, viewMode = undefined, height, ...frameProps}) => {
  const baseUrl = 'https://onesignal.github.io/sdk-releases';
  const buildUrl = (theme, sdkFilter, viewMode) => {
    const url = new URL(baseUrl);
    const params = new URLSearchParams();
    if (theme) {
      params.set('theme', theme);
    }
    if (sdkFilter) {
      params.set('sdk', sdkFilter);
    }
    if (viewMode) {
      params.set('viewMode', viewMode);
    }
    if (params.toString()) {
      url.search = params.toString();
    }
    return url.toString();
  };
  const detectTheme = () => {
    if (document.documentElement.classList.contains('dark')) {
      return 'dark';
    }
    return 'light';
  };
  const [theme, setTheme] = useState('light');
  const [iframeSrc, setIframeSrc] = useState(() => {
    const initialTheme = detectTheme();
    return buildUrl(initialTheme, sdkFilter, viewMode);
  });
  useEffect(() => {
    const currentTheme = detectTheme();
    setTheme(currentTheme);
    setIframeSrc(buildUrl(currentTheme, sdkFilter, viewMode));
    const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
    const handleThemeChange = () => {
      const newTheme = detectTheme();
      setTheme(newTheme);
      setIframeSrc(buildUrl(newTheme, sdkFilter, viewMode));
    };
    if (mediaQuery.addEventListener) {
      mediaQuery.addEventListener('change', handleThemeChange);
    } else {
      mediaQuery.addListener(handleThemeChange);
    }
    window.addEventListener('storage', handleThemeChange);
    const observer = new MutationObserver(handleThemeChange);
    observer.observe(document.documentElement, {
      attributes: true,
      attributeFilter: ['class', 'data-theme']
    });
    return () => {
      if (mediaQuery.removeEventListener) {
        mediaQuery.removeEventListener('change', handleThemeChange);
      } else {
        mediaQuery.removeListener(handleThemeChange);
      }
      window.removeEventListener('storage', handleThemeChange);
      observer.disconnect();
    };
  }, [sdkFilter, viewMode]);
  const getIframeHeight = () => {
    if (viewMode === 'table') {
      return '450';
    }
    if (viewMode === 'mini') {
      return '170';
    }
    return '800';
  };
  const iframeHeight = height || getIframeHeight();
  return <Frame {...frameProps}>
      <iframe src={iframeSrc} width="100%" height={iframeHeight} frameBorder="0" style={{
    border: "none"
  }} title="SDK Releases" key={iframeSrc} />
    </Frame>;
};

OneSignal 移动 SDK 在您的 iOS、Android、Huawei 和 Amazon 应用中启用[推送通知](./push)、[应用内消息](./in-app-messages-setup)和 [Live Activities](./live-activities)。设置分为两个步骤：

1. **配置平台凭据** — 将您的 FCM、APNs、HMS 或 ADM 凭据连接到 OneSignal
2. **集成 SDK** — 为您的平台安装 OneSignal SDK 并在您的应用中初始化它

对于网站，请参阅 [Web SDK 设置](./web-push-setup)。

***

## 配置平台凭据

每个平台都需要自己的推送凭据。在集成 SDK 之前，请为您的应用支持的每个平台配置凭据。

### 配置您的 OneSignal 应用和平台

使用您支持的平台配置您的 OneSignal 应用——Apple (APNs)、Google (FCM)、华为 (HMS) 和/或 Amazon (ADM)。

<Note>
  如果您的组织已有 OneSignal 账户，请[申请加入](/docs/cn/manage-team-members)组织。否则，请[注册免费账户](https://onesignal.com)以开始使用。
</Note>

<Accordion title="分步设置说明" icon="circle-chevron-down">
  <Steps>
    <Step title="创建或选择您的应用">
      点击 **新应用/网站** 创建新应用，或在 **设置 > 推送和应用内** 中向现有应用添加平台。选择您要配置的平台，然后点击 **下一步：配置您的平台**。

      <Frame caption="设置您的第一个 OneSignal 应用、组织和频道。">
        <img src="https://mintcdn.com/onesignal/BK2J-grzBpDdh8NC/images/dashboard/new-app-org-channel.png?fit=max&auto=format&n=BK2J-grzBpDdh8NC&q=85&s=ee0045484152ed15095f619344aa0564" alt="OneSignal 控制台显示包含组织名称、应用名称和频道选择的新应用设置流程" width="2592" height="1904" data-path="images/dashboard/new-app-org-channel.png" />
      </Frame>
    </Step>

    <Step title="配置平台凭据">
      为您的平台输入凭据：

      * **Android**：[设置 Firebase 凭据](/docs/cn/android-firebase-credentials)
      * **iOS**：[p8 令牌（推荐）](/docs/cn/ios-p8-token-based-connection-to-apns) 或 [p12 证书](/docs/cn/ios-p12-generate-certificates)
      * **Amazon**：[生成 API 密钥](/docs/cn/generate-an-amazon-api-key)
      * **华为**：[授权 OneSignal](/docs/cn/authorize-onesignal-to-send-huawei-push)

      输入您的凭据后点击 **保存并继续**。
    </Step>

    <Step title="保存您的应用 ID 并安装 SDK">
      您的 **应用 ID** 显示在最终屏幕上。复制并保存它——初始化 SDK 时需要使用它。选择您的 SDK 平台，然后按照设置指南操作。

      <Frame caption="保存您的应用 ID 并邀请其他团队成员。">
        <img src="https://mintcdn.com/onesignal/VypVshrFHTBZfEma/images/dashboard/app-id-and-team-invite.png?fit=max&auto=format&n=VypVshrFHTBZfEma&q=85&s=e1e2aab6cca7c4aa6b9a76eff362d5af" alt="OneSignal 控制台显示设置完成后的应用 ID 和团队邀请选项" width="2592" height="1904" data-path="images/dashboard/app-id-and-team-invite.png" />
      </Frame>
    </Step>
  </Steps>
</Accordion>

***

## 集成 SDK

<Columns cols={2}>
  <Card title="Android 原生" icon="android" href="./android-sdk-setup">
    使用 FCM 将 OneSignal SDK 集成到原生 Android 应用中。
  </Card>

  <Card title="iOS 原生" icon="apple" href="./ios-sdk-setup">
    使用 APNs 将 OneSignal SDK 集成到原生 iOS 应用中。
  </Card>

  <Card title="React Native 和 Expo" icon="react" href="./react-native-sdk-setup">
    适用于 React Native 和 Expo 环境的设置。
  </Card>

  <Card title="Flutter" icon="mobile" href="./flutter-sdk-setup">
    使用 Dart 的 Flutter 应用的 SDK 设置。
  </Card>

  <Card title="Unity" icon="unity" href="./unity-sdk-setup">
    适用于 Unity 移动应用的跨平台 SDK 设置。
  </Card>

  <Card title=".NET MAUI" icon="microsoft" href="./net-sdk-setup">
    将 OneSignal SDK 与 .NET MAUI 应用集成。
  </Card>

  <Card title="华为 Android 原生" icon="mobile-screen" href="./huawei-sdk-setup">
    使用 HMS 推送服务的华为设备 SDK 设置。
  </Card>

  <Card title="Cordova、Ionic 和 Capacitor" icon="code" href="./cordova-sdk-setup">
    适用于 Cordova、Ionic 和 Capacitor 混合移动应用的设置。
  </Card>
</Columns>

### 其他集成

<Columns cols={2}>
  <Card title="FlutterFlow" icon="wand-magic-sparkles" href="./flutterflow-sdk-setup">
    适用于 FlutterFlow 应用的低代码 SDK 设置。
  </Card>

  <Card title="Median.co" icon="globe" href="./median-integration">
    Median.co（原 GoNative.io）应用的集成指南。
  </Card>
</Columns>

***

## SDK 版本

<SdkReleasesIframe sdkFilter="android,ios,unity,flutter,xamarin,cordova,reactnative,dotnet" viewMode="table" height="500" />

***

## 常见问题

### SDK 是必需的吗？

不需要，但强烈推荐——并且在 [GitHub](https://github.com/OneSignal/sdks) 上开源。您可以仅使用 [REST API](/reference/rest-api-overview) 集成 OneSignal，但 SDK 能显著简化流程，尤其是在跨平台处理推送通知时。

### 没有 SDK 可以做什么？

您可以直接使用以下 API：

* [创建用户](/reference/create-user)
* [创建订阅](/reference/create-subscription)
* [更新用户](/reference/update-user)
* [更新订阅](/reference/update-subscription)
* [创建消息](/reference/create-message)
* [通知负载参考](./osnotification-payload)

<Info>
  [应用内消息](./in-app-messages-setup)和 [Live Activities](./live-activities) 需要 SDK——它们无法仅通过 API 投递。
</Info>

### 为什么建议使用 SDK？

推送通知有 SDK 为您处理的平台特定要求，包括：

* 在 Android、iOS、Huawei 和 Web 上获取推送令牌
* 管理订阅状态和用户选择加入提示
* 在客户端显示和处理推送通知

Apple 的 APNs 和 Google 的 FCM 使用不同的负载格式。OneSignal SDK 解析自定义负载以准确显示和跟踪消息。手动维护这些会增加相当大的复杂性。了解更多：[构建与购买：构建推送通知平台的要素](https://onesignal.com/blog/build-vs-buy-what-goes-into-building-a-push-notification-platform/)

### iOS 和 Android 是否需要单独的 OneSignal 应用？

不需要。一个 OneSignal 应用支持多个平台——iOS、Android、Huawei、Amazon 和 Web。在 **设置 > 推送和应用内** 中配置每个平台的凭据，它们都共享同一个应用、用户和细分。

### 中国或华为设备能接收推送通知吗？

如果设备有 Google Play 服务，它通过 FCM 接收推送。如果应用是从华为应用市场下载的（包括运行 Android 的非鸿蒙华为设备），它通过 HMS 接收推送——请设置[华为 SDK](./huawei-sdk-setup) 以启用此功能。OneSignal 对同时支持 HMS 和 FCM 的设备默认使用 FCM。如有需要，您可以[优先使用 HMS 而不是 FCM](./huawei-sdk-setup#prefer-hms-over-fcm-optional)。
