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:) }