嗨,我已经按照iOS上使用GCM的教程进行了操作。它一直表现得很不稳定(这意味着所有证书、权限等都没问题)。然而最近,我一直在收到两条错误信息:
GCM | GCM registration is not ready with auth credentials
.
此外,重新连接到GCM时失败,并显示以下内容:
Error Domain=com.google.gcm Code=501 "(null)"
部分原因是设备没有获取到GCM注册ID。是否还有其他人最近更频繁地遇到过这些问题?或者是因为我调用GCM API的顺序不正确(特别是connectWithHandler:
、startWithConfig:
和tokenWithAuthorizedEntity
方法)?我怀疑原因是后者,因为我在一段时间之后确实会获得GCM ID。
我并不总是会收到GCM ID。当我没有收到ID时,通常需要通过Xcode运行应用程序一两次(或强制关闭应用程序)。显然,我的用户不应该做这些事情。
这是我调用GCM API的顺序:
- 设备获取APNS令牌
- 我使用我的APNS令牌调用
tokenWithAuthorizedEntity:
- ^ 这通常会导致上述两个错误之一。
- 每当我确实需要GCM令牌时,我通过再次调用
tokenWithAuthorizedEntity
来强制重新获取GCM令牌。
此外,我还在我的applicationDidBecomeActive:
方法中编写了connectWithHandler:
调用。
几个问题:
- 如果我只对接收GCM推送消息感兴趣而不将它们发送给上游,那么是否有必要在
applicationDidBecomeActive:
中调用connectWithHandler:
?
tokenWithAuthorizedEntity
?)startWithConfig
应该在何时调用?在获取GCM令牌之前还是之后?编辑:有限的测试显示以下内容似乎有效:
- 首先获取GGLInstance ID(即调用
getIDWithHandler:
) - 如果上述GGLInstance ID没有任何错误,请请求GCM令牌(即调用
tokenWithAuthorizedEntity:
) - 这样通常会产生以下错误,但至少在短时间内(~3-10秒钟),令牌就会被接收:
无法在缓存中找到令牌 错误域= com.google.iid Code=-25300 “(null)”