GCM 注册失败,出现 1003 错误

Posted

技术标签:

【中文标题】GCM 注册失败,出现 1003 错误【英文标题】:GCM failing to register with 1003 error 【发布时间】:2015-10-15 09:38:30 【问题描述】:

我正在为 ios9 重新编译我的 iPhone 应用程序,但在尝试注册 GCM 时遇到错误,如下所示:

向 GCM 注册失败并出现错误:操作无法完成。 (com.google.iid 错误 1003。)

我已经找了一段时间了,在 Google 上找不到任何东西。 谁能帮我解决这个问题?

提前致谢

来自 appdelegate.swift 的代码如下:

var connectedToGCM = false
var subscribedToTopic = false
var gcmSenderID: String?
var registrationToken: String?
var registrationOptions = [String: AnyObject]()

let registrationKey = "onRegistrationCompleted"
let messageKey = "onMessageReceived"
let subscriptionTopic = "/topics/global"

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 

        let settings: UIUserNotificationSettings =
        UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)
        application.registerUserNotificationSettings(settings)
        application.registerForRemoteNotifications()

GCMService.sharedInstance().startWithConfig(GCMConfig.defaultConfig())

    return true


func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData)

    //Process the deviceToken and send it to your server

    let tokenChars = UnsafePointer<CChar>(deviceToken.bytes)
    var tokenString = ""

    for var i = 0; i < deviceToken.length; i++
    
        tokenString += String(format: "%02.2hhx", arguments: [tokenChars[i]])
    

    GGLInstanceID.sharedInstance().startWithConfig(GGLInstanceIDConfig.defaultConfig())
    registrationOptions = [kGGLInstanceIDRegisterAPNSOption:deviceToken,
        kGGLInstanceIDAPNSServerTypeSandboxOption:true]
    GGLInstanceID.sharedInstance().tokenWithAuthorizedEntity(gcmSenderID, scope: kGGLInstanceIDScopeGCM, options: registrationOptions, handler: registrationHandler)


func registrationHandler(registrationToken: String!, error: NSError!)

    if (registrationToken != nil)
    
        self.registrationToken = registrationToken
        print("Registration Token: \(registrationToken)")
        APIManager.sharedInstance.setDeviceToken(registrationToken)
        self.subscribeToTopic()
        let userInfo = ["registrationToken": registrationToken]
        NSNotificationCenter.defaultCenter().postNotificationName(
            self.registrationKey, object: nil, userInfo: userInfo)
    
    else
    
        print("Registration to GCM failed with error: \(error.localizedDescription)")
        let userInfo = ["error": error.localizedDescription]
        NSNotificationCenter.defaultCenter().postNotificationName(
            self.registrationKey, object: nil, userInfo: userInfo)
    

【问题讨论】:

我们能看到一些代码吗?可能有助于诊断问题。 【参考方案1】:
1003 error talks "Token request has invalid authorizedEntity."

在我的情况下,gcmSenderID 为零。

也许您没有使用来自GoogleService-Info.plistgcmSenderID。要从GoogleService-Info.plist 导入设置,请插入此代码

var configureError:NSError?
        GGLContext.sharedInstance().configureWithError(&configureError)
        assert(configureError == nil, "Error configuring Google services: \(configureError)")
        gcmSenderID = GGLContext.sharedInstance().configuration.gcmSenderID

进入

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool  ... 

【讨论】:

【参考方案2】:

谷歌错误 1003

我在根文件夹中有 GoogleService-info.plist。 在我的情况下,gcmSenderID 甚至不为空,但我仍然收到此错误。

但我在 didFinishLaunchingOptions 下的 AppDelegate.m 文件中缺少此代码。

NSError* 配置错误; [[GGLContext sharedInstance] configureWithError:&configureError]; NSAssert(!configureError, @"配置谷歌服务时出错:%@", configureError); _gcmSenderID = [[[GGLContext sharedInstance] 配置] gcmSenderID];

【讨论】:

【参考方案3】:

对我来说这是一个愚蠢的错误。 'GoogleService-Info.plist' 命名错误并放置在错误的位置,并且不在我的构建阶段 -> 复制捆绑资源。

【讨论】:

我已将其放入项目的根文件夹并添加到我的目标中。它被命名为 GoogleService-Info.plist。但是我仍然收到同样的错误;有什么想法吗?

以上是关于GCM 注册失败,出现 1003 错误的主要内容,如果未能解决你的问题,请参考以下文章

Android GCM 注册失败。为啥?

GCM IOS 未注册问题

Google 推送通知 - DOMException:注册失败 - 推送服务错误

如何使用 Java GCM API 在 android 设备上获取失败推送通知的注册 ID

SMACK API 带内注册失败并出现禁止错误

eyeBeam1.5网络电话注册码激活后 注册SIP账号设定失败:出现注册错误403-Forbidden 怎么解决知道的告诉谢