【问题标题】:GCM : Configuring subspecs failed @ CloudMessagingGCM:配置子规范失败@ CloudMessaging
【发布时间】:2016-09-30 17:53:30
【问题描述】:

我正在尝试将 Google Cloud Messaging 集成到我的 iOS 应用程序中。我已遵循this link 中提供的每条指令。

我还集成了谷歌登录,它工作正常。

问题是我在下面的代码中遇到断言失败。

NSError* configureError;
[[GGLContext sharedInstance] configureWithError:&configureError];
NSAssert(!configureError, @"Error configuring Google services: %@", configureError);

用于配置云消息传递的子规范。 上面这段代码在AppDelegate.m文件中的didFinishLaunchingWithOptions方法中。

产生的错误是:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“配置 Google 服务时出错:错误域=com.google.greenhouse 代码=-104“无法正确配置子规范 CloudMessaging”UserInfo={NSLocalizedDescription=无法正确配置subspec CloudMessaging, NSLocalizedFailureReason=GCM Sender ID 不能为 nil 或空。

现在我不明白这个错误的含义。是的,它明确指出发件人 ID 不得为零。但它从哪里得到空 ID。

我已经在模拟器中测试过了。不知道有没有影响。

如果我评论此代码并在真实设备中运行,我也会获得注册令牌,但我没有收到来自服务器的任何通知。服务器端代码经过测试,适用于 android。

【问题讨论】:

  • FCM(以前的 GCM)无法在模拟器上测试,您必须使用真实设备。您是否也将 GoogleService-Info.plist 添加到您的项目中?在这里查看在 iOS 上设置 FCM:firebase.google.com/docs/cloud-messaging/ios/client
  • @ArthurThompson:因为他们使用的是GGLContext,所以看起来他们使用的是 GCM,而不是 FCM。
  • GCM 和 FCM 都需要 GoogleServices-info.plist 它包含所需的发件人 ID

标签: ios objective-c google-cloud-messaging


【解决方案1】:

最后我解决了这个问题。首先感谢大家的快速回复。 我所做的将在以下步骤中进行解释。

  1. 获取 GCMExample 项目。我从 Github 下载的,因为 pod try google 没有列出 GCMExample 项目。
  2. here生成 GoogleServices-Info.plist 文件

  3. 比较 GCMExample 和 MyProject 的 plist 文件。

在这里我得到了不同之处。在我的项目中,GCM 被禁用,并且其中没有发件人 ID。我不知道这到底是怎么发生的。 所以我手动设置了 GCM 服务启用并添加了我之前创建的应用程序的发件人 ID。

这就是我解决问题的方法。

【讨论】:

    【解决方案2】:

    检查以下链接以获取证书

    cloud-messaging_ios_certs

    确保您正确执行以下步骤

    1. 在开启推送通知的情况下创建您的 App ID。
    2. 创建您的 SSL 证书。
    3. 下载并运行它以添加到配置文件中。
    4. 要确保您的配置文件具有此证书,请转到 Xcode -> 首选项 -> 帐户 -> 您的 Apple ID -> 您的团队 -> 查看详细信息 -> 全部下载。

    【讨论】:

    • 我如何知道我的配置文件是否包含 SSL(APNs 开发 iOS)证书?
    • 您是否在苹果开发者门户中创建了证书或苹果ID?
    • 检查这个链接 developers.google.com/cloud-messaging/ios/start 你应该像这样实现 applicationDidBecomeActive -(void)applicationDidBecomeActive:(UIApplication *)application { // 连接到 GCM 服务器以接收非 APNS 通知 [[GCMService sharedInstance] connectWithHandler:^(NSError *error) { if (error) { NSLog(@"Could not connect to GCM: %@", error.localizedDescription); } else { NSLog(@"连接到 GCM"); // ... } }]; }
    • 我也从 GCMExample 实现了该方法和其他方法。但它仍然显示相同的错误。
    • 查看以下链接以获得多种解决方案。 stackoverflow.com/questions/31294380/…
    猜你喜欢
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 2012-11-16
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    相关资源
    最近更新 更多