# Crashlytics 集成

<Aside type="caution" icon="setting" title="需要开发者协助">
 您需要开发团队的帮助来设置此集成。请与他们分享本指南。
</Aside>

信任的建立需要时间，而失去它却在转瞬之间。一旦用户开始使用您的应用，您便希望与他们建立长期的关系，而应用崩溃可能会成为破坏这种关系的因素。

如果您有机会以一种非常个性化的方式向用户致歉呢？例如，您的统计数据显示，30% 的用户在使用最新版本时遇到了崩溃，您只需要告知他们更新应用以获取修复。然而，另外 70% 的用户可能不希望听到他们喜爱的应用存在潜在问题。

这时，我们就能提供帮助。Crashlytics 和 Pushwoosh 的集成非常简单。只需几行代码，您就可以定位并仅通知那些在应用中遇到特定崩溃的用户，而无需打扰其他用户。

让我们看看它是如何工作的。

## 集成 Crashlytics

首先，我们需要向 [Crashlytics](https://firebase.google.com/docs/crashlytics) 提供一个标识符，以便后续定位用户。Crashlytics 为此提供了 **setUserIdentifier** 方法（[iOS](https://docs.fabric.io/ios/crashlytics/enhanced-reports.html#user-identifiers) 链接，[Android](https://docs.fabric.io/android/crashlytics/enhanced-reports.html#user-information) 链接）。

在我们的案例中，需要将其设置为 Pushwoosh Hardware ID。您可能知道，Pushwoosh Hardware ID 在 iOS 上是 _IDFV_（如果您链接到 _AdSupport.framework_，则是 _IDFA_），在 Android 上通常是 _Android Id_ 或 _Serial Number_。

以下代码可以简化此操作：

<Tabs>
<TabItem label="Java">
```java
String userId = pushManager.getPushwooshHWID(this);
Crashlytics.setUserIdentifier(userId);
```
</TabItem>

<TabItem label="Objective-C">
```objective-c
NSString * userId = [[PushNotificationManager pushManager] getHWID];
[Crashlytics setUserIdentifier:userId];
```
</TabItem>
</Tabs>

就是这样！现在您已经开始使用 Crashlytics 收集用户 ID 了。

## 从 Crashlytics 的崩溃报告中下载用户 ID

请注意，根据 Fabric 文档，"Export IDs" 按钮可能需要长达 24 小时才会出现在 Crashlytics 控制面板的崩溃详情报告中。

<img src="/integrations-crashlytics-integration-1.webp" alt="Crashlytics 崩溃详情报告中的 Export IDs 按钮"/>

点击 _Export IDs_ 按钮将下载 _user-data.csv_ 文件。该文件结构如下：

```javascript title="user-data.csv"
userId,email,name,mostRecentTimestamp,count
XXXXXXXXXXXXXXXX,test@example.com,John Snow,MAR 03 2016 01:22,1
YYYYYYYYYYYYYYYY,another@example.com,John Snow Jr,MAR 03 2016 01:11,1
```