Xamarin SDK 疑难解答
收集详细日志
若要获取有关如何调整日志级别的说明 VERBOSE ,请参阅 Xamarin 其他 api 部分。
可以在 "调试 > Windows > 输出" 窗口中找到详细日志。
安装过程中的问题
- 对于 Xamarin 应用程序,请确保在引用任何库的所有项目中安装包。 否则,你将会看到错误。
- 如果在生成 Xamarin 时看到此错误:
MTOUCH: Error MT3001: Could not AOT the assembly 'obj/**/Build/Microsoft.AppCenter.**.iOS.Bindings.dll' (MT3001)需要将 Xamarin 组件更新为版本 10.4.0.128 或更高版本。 - 如果你在生成 Xamarin 时看到此错误:
MTOUCH: Error MT5210: Native linking failed, undefined symbol: _OBJC_METACLASS_$_MS{SomeSdkClassName}. Please verify that all the necessary frameworks have been referenced and native libraries are properly linked in. (MT5210)或类似错误 (MT5211代码包含 App Center) 所涉及的类似消息,请确保在AppCenter.Start使用特定服务的 api 之前调用。 如果正在呼叫Start但有此问题,需要将 Xamarin iOS 组件更新为版本 10.4.0.128 或更高版本。 - 在控制台中,查找消息-"App Center SDK 已成功配置" 的断言日志。 这将验证 SDK 是否已成功配置。
分析数据不会显示在门户中
请确保已正确集成 SDK 模块。
请确保与方法调用一起提供了正确的应用程序机密
Start()。 您可以Start()通过在门户中打开应用程序并导航到入门 "页" 来复制确切的代码。如果要查看发送到后端的日志,请在应用程序中将日志级别更改为 " 详细 ",SDK 会在控制台中打印日志。 在启动 SDK 之前调用以下 API。
AppCenter.LogLevel = LogLevel.Verbose;检查 "信息日志级别) " 中的 "App Center SDK 已成功配置" (日志,然后查看是否看到 HTTPS 请求日志。
确保你的设备处于联机状态。
有时,可能需要几分钟的时间才能在门户中显示日志。 如果出现这种情况,请等待一段时间。
若要检查 App Center 后端是否收到你的数据,请参阅 Analytics 服务中的 "日志流" 部分。 发送事件后应显示事件。
故障不显示在门户中
请确保已正确集成 SDK 模块。
请确保与方法调用一起提供了正确的应用程序机密
Start()。 您可以Start()通过在门户中打开应用程序并导航到入门 "页" 来复制确切的代码。崩溃后重新启动应用。 App Center 崩溃将仅在重启后转发崩溃日志。 此外,在 Xamarin 和 Xamarin 上,如果附加了调试器,SDK 将不会保存任何崩溃日志。 请确保在崩溃 iOS 应用时未附加调试器。 在 Xamarin 上,你可以在附加调试器的情况下崩溃,但需要在中断到未处理的异常后继续执行。
如果要查看发送到后端的日志,请在应用程序中将日志级别更改为 " 详细 ",SDK 会在控制台中打印日志。 在启动 SDK 之前调用以下 API。
AppCenter.LogLevel = LogLevel.Verbose;检查 "信息日志级别) " 中的 "App Center SDK 已成功配置" (日志,然后查看是否看到 HTTPS 请求日志。
请勿使用任何其他提供故障报告功能的库,如 Xamarin Insights 或 HockeyApp。 你只能集成一个故障报告 SDK。
如果在 Android 中使用 Hockey 应用,请确保在 App Center 后对其进行初始化。
确保你的设备处于联机状态。
有时,可能需要几分钟的时间才能在门户中显示日志。 如果出现这种情况,请等待一段时间。
如果要检查 SDK 是否检测到下一个应用启动时出现故障,可以调用 API 来检查应用程序在上一个会话中是否崩溃并显示警报。 或者,你可以扩展故障回调以查看是否已成功将其发送到服务器。
若要检查 App Center 后端是否收到崩溃,请前往 Analytics 服务中的 "日志流" 部分。 一旦发送,你的崩溃就会出现在那里。
分发和应用内更新正在阻止我的自动 UI 测试
如果你运行的是自动 UI 测试,则启用的应用内更新会阻止你的自动 UI 测试,因为他们将尝试针对 App Center 后端进行身份验证。 建议不要为 UI 测试启用 App Center 分发。
添加 DistributePlay 后,Google Play 拒绝应用程序
Google Play 拒绝使用此模块的应用程序, Distribute 因为它包含应用程序内的更新实现。 为避免这种情况,App Center SDK 具有 DistributePlay 模块,其中包含主模块的存根。 它会将主要汇编替换为用作存根组装,这会模仿 Distribute API。 不需要在客户端应用程序中进行其他更改。 没有 DistributePlay 任何应用程序内更新相关的代码。
如果在 Distribute 将 module 替换为 DistributePlay 应用后仍拒绝应用,请按照以下步骤验证是否已 Distribute 正确替换该模块:
- 请确保在
DistributeDistributePlayGoogle Play 控制台中的所有发布组的所有发布中将替换为。 - 如果使用,
Xamarin.Forms请确保将该DistributePlay模块添加到共享和Xamarin.Android项目中。 - 验证输出文件是否不包含
Microsoft.AppCenter.Distribute.Android.Bindings.dll程序集。 您可以使用 APK 分析器 来检查它。
控制台中指示无法在 iOS 上打开数据库的消息
App Center 使用 SQLite 在将日志发送到后端之前保存日志。 如果你要将应用程序与你自己的 SQLite 库绑定,而不是使用 OS 提供的库,则你可能会在控制台中看到类似于下面的错误, [AppCenter] ERROR: -[MSACDBStorage executeSelectionQuery:]/147 Failed to open database 并且不会在后端中看到任何分析或故障信息。 将 SDK 更新到版本0.16.0 或更高版本。
单元测试中 App Center SDK 行为
SDK 包使用 .NETStandard 1.0 共享 Xamarin 项目的二进制文件。 实现测试时,必须将 .NETStandard 1.0 用作目标框架,否则测试可能会产生意外行为。
如果你的项目面向 .NET Core 或框架更高 .NETStandard 2.0 ,则在此情况下,将 Windows 桌面二进制文件中使用测试,因此,为了避免任何问题,你可以模拟 App Center 的 SDK。
保护 App Center 机密值
是应用的标识符,需要知道流量应用到的应用,并且不能用于检索 app_secret 或编辑现有数据。 如果公开,则最大的风险是向应用发送错误数据,但这不会影响 app_secret 数据的安全性。
若要检索任何敏感数据,需要提供在客户端生成的应用/用户令牌 。 无法使客户端上的数据完全安全。
可以通过使用环境变量将应用机密注入代码来提高应用的安全性。 这样,机密在代码中不可见。