iOS GCM错误代码501

最近我开始得到这个错误代码,每当我尝试在我的iOS应用程序中使用GCM API:错误域= com.google.gcm代码= 501“(空)”

我找不到这个地方的意思? 这实际上是HTTP状态代码,意思是不实施?

我在这行代码中首先得到错误:

GCMService.sharedInstance().connectWithHandler() { error in if(error != nil) { print(error) } } 

调用方法打印此消息:

GCM | GCM注册未准备好授权凭证

和错误是错误域= com.google.gcm代码= 501“(空)”

发生错误是因为我在打电话

 GCMService.sharedInstance().connectWithHandler() { error in if(error != nil) { print(error) } } 

在我收到注册令牌之前,或者未能刷新我的令牌。

“错误域= com.google.gcm代码= 501”(空)“”是一个非常糟糕的错误消息。

如果你正在开发使用这个样本

https://github.com/googlesamples/google-services/blob/master/ios/gcm/GcmExample/

比你要知道的是,在某些方面这是相当可怜的和错误的

[[GGLInstanceID sharedInstance] tokenWithAuthorizedEntity成功,但仍然popup错误),您必须调用ALSO [[GGLInstanceID sharedInstance] startWithConfig:在调用[[GCMService sharedInstance] connectWithHandler:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSError* configureError; [[GGLContext sharedInstance] configureWithError:&configureError]; if (configureError) { NSLog(@"Error configuring Google services: %@", configureError); } GCMConfig *gcmConfig = [GCMConfig defaultConfig]; gcmConfig.receiverDelegate = self; [[GCMService sharedInstance] startWithConfig:gcmConfig]; // add this { GGLInstanceIDConfig *instanceIDConfig = [GGLInstanceIDConfig defaultConfig]; instanceIDConfig.delegate = self; [[GGLInstanceID sharedInstance] startWithConfig:instanceIDConfig]; } ... [self requestAndSynchronizeGCMTokenIfNeeded]; ... return YES; } 

但是请记住,当[[GGLInstanceID sharedInstance] tokenWithAuthorizedEntity:没有完成时,您将总是得到错误,所以您应该在applicationDidBecomeActive添加一个chcek。 喜欢

 - (void)applicationDidBecomeActive:(UIApplication *)application { if (self.data.deviceToken) { [[GCMService sharedInstance] connectWithHandler:^(NSError *error) { if (error) { NSLog(@"Could not connect to GCM: %@", error.localizedDescription); } else { self.connectedToGCM = YES; NSLog(@"Connected to GCM"); [self subscribeToTopic]; } }]; } } 

最后,你应该尝试在tokenWithAuthorizedEntity:的处理程序块中进行连接tokenWithAuthorizedEntity:因为它有时在令牌被回收之前被调用,因此以错误结束

 [[GGLInstanceID sharedInstance] tokenWithAuthorizedEntity:gcmSenderID scope:kGGLInstanceIDScopeGCM options:options handler:^(NSString *token, NSError *error) { // connect to GCM also here ([[GCMService sharedInstance] connectWithHandler:) }