# react-native-gysdk

`react-native-gysdk` 是个推官方开发的 React Native 插件，用于快速集成推送功能，助力开发者高效实现消息推送服务。

---

## 环境要求

- **React Native 版本**:
  - `react`: 18.3.1
  - `react-native`: 0.75.4
- **插件版本**: `react-native-gysdk` 1.0.6

**注意**:
- 请确保项目环境与上述版本兼容。
- 部分功能在 Android 和 iOS 平台上的 API 实现有所不同，请参考 `index.js` 或 `index.d.ts` 中的 API 注释。

---

## 1. 安装

### 1.1 自动安装

在项目根目录下执行以下命令：

```bash
# 步骤 1：添加 npm 包依赖
npm install react-native-gysdk@latest --save

# 步骤 2：链接 iOS 原生代码（适用于 iOS Pod 项目）
npx pod-install

# 步骤 2：链接（适用于非 Autolinking 项目或 iOS 非 Pod 项目）
react-native link
```

### 1.2 示例代码

查看完整示例代码：
- [Android 示例](example/AndroidDemo)
- [iOS 示例](example/iOSDemo)

---

## 2. 配置

### 2.1 获取 App ID

访问 [个推官网](https://dev.getui.com) 注册并在后台获取 `appId`。

### 2.2 Android 配置

#### 2.2.1 AndroidManifest.xml

在 `AndroidManifest.xml` 的 `<application>` 节点中添加以下配置：

```xml
<manifest>
  <application>
    <meta-data android:name="GETUI_APPID" android:value="你的appid"/>
    <meta-data android:name="GT_INSTALL_CHANNEL" android:value=""/>
  </application>
</manifest>
```

#### 2.2.2 app/build.gradle

配置签名信息，确保调试和发布版本的签名正确：

```gradle
signingConfigs {
  debug {
    storeFile file('debug.keystore')
    storePassword 'android'
    keyAlias 'androiddebugkey'
    keyPassword 'android'
  }
}
buildTypes {
  debug {
    signingConfig signingConfigs.debug
  }
  release {
    // 配置 release 签名
  }
}
```

#### 2.2.3 混淆配置

如果启用 ProGuard 混淆，请在 `proguard-rules.pro` 中添加以下规则：

```proguard
# 移动 SDK (5.9.1)
-dontwarn com.cmic.sso.sdk.**
-keep class com.cmic.sso.sdk.** {*;}
# 移动 SDK (5.9.3，包名变更)
-dontwarn com.cmic.gen.sdk.**
-keep class com.cmic.gen.sdk.** {*;}
# 电信 SDK
-dontwarn cn.com.chinatelecom.**
-keep class cn.com.chinatelecom.** {*;}
# 联通在线
-dontwarn com.unicom.online.account.shield.**
-keep class com.unicom.online.account.shield.** {*;}
-keep public class android.net.GyConnectivityManager {public *;}
# 个验 SDK
-dontwarn com.g.gysdk.**
-keep class com.g.gysdk.** {*;}
# 联通相关
-keep class com.unicom.online.account.kernel.** {*;}
-dontwarn org.bouncycastle.**
-keep class org.bouncycastle.** {*;}
# 个推 GTC
-keep class com.getui.gtc.** {*;}
-keepattributes Signature, InnerClasses, EnclosingMethod, Exceptions, *Annotation*
-keep class com.getui.gtc.dyc.** {*;}
-keep class com.getui.gtc.dim.** {*;}
-keep class com.getui.gtc.base.** {*;}
-keep class com.igexin.base.** {*;}
```


### 2.3 iOS 配置

#### 2.3.1 使用 CocoaPods 安装

如果你的 React Native 项目通过 CocoaPods 集成，请按照以下步骤操作：

1. 在 `Podfile` 的对应 `target` 中添加以下代码：

   ```ruby
   pod 'GySdkRN', :path => '../node_modules/react-native-gysdk'
   ```

2. 在终端执行以下命令：

   ```bash
   pod install
   ```

**注意**：
- 使用 CocoaPods 安装时，不要运行 `react-native link`，否则可能导致冲突。
- 如果在 iOS 工程中找不到头文件，请在 `TARGETS -> Build Settings -> Search Paths -> Header Search Paths` 中添加以下路径：
  ```
  $(SRCROOT)/../node_modules/react-native-gysdk/ios/RCTGetuiModule
  ```
---

## 3. API 调用与消息订阅

- Android 和 iOS 平台的 API 实现存在差异，请参考 `index.js` 或 `index.d.ts` 中的 API 注释。
- 示例代码：
  - [Android 示例](example/AndroidDemo)
  - [iOS 示例](example/iOSDemo)

---

## 4. iOS 注意事项

- 确保正确配置 CocoaPods，避免与 `react-native link` 冲突。
- 检查头文件路径设置，确保编译时能正确找到插件的头文件。

---

## 5. 常见问题

- **问题**：Android 混淆后应用崩溃？
  - **解决**：检查 `proguard-rules.pro` 是否包含所有必要的混淆规则。
- **问题**：iOS 编译时找不到头文件？
  - **解决**：在 Xcode 的 `Header Search Paths` 中添加插件路径。
- **问题**：API 调用无响应？
  - **解决**：检查 `appId` 是否正确配置，并确保已调用 `startSdk` 初始化。

---

## 6. 支持

如需进一步帮助，请访问 [个推官网](https://dev.getui.com) 或联系技术支持。