gpt4 book ai didi

ios - GCM IOS NotRegistered 问题

转载 作者:搜寻专家 更新时间:2023-10-30 22:13:00 24 4
gpt4 key购买 nike

我已经使用 GCM 很长时间了。有一天突然断了。问题是我发送的第一个推送返回成功状态,但该应用程序没有收到任何推送。我发送的第二次推送失败并出现 NotRegistered 错误。我重新安装应用程序:成功(未收到通知)、失败(未注册)-> 循环。我不知道发生了什么变化。 Google 支持非常无益,并且花很多时间回答简单的问题,无论是 GCM 问题、APNs 问题还是客户端问题。如果以前有人遇到过此类问题,请告诉我要查找的内容。这就是它的样子:

Here is the HTTP log

我怀疑它是在更新到 iOS 9 之后发生的。不过我不确定。如果新 iOS 中有可能阻止 GCM 的东西,如果有人指出,我将不胜感激。

更新:

GCM push fails with NotRegistered

那个人有类似的问题。问题出在一些 list 文件上。我需要为 iOS 9 添加 Info.plist 中的一些条目以允许 GCM 吗?

更新:

每次应用启动时都会调用 onTokenRefresh。不过,我得到了相同的 token 。所以我怀疑 GCM 服务器上的 token 有问题。

APPDELEGATE 中的 GCM 委托(delegate)代码:

var connectedToGCM = false


private var deviceToken: NSData?

var gcmSenderID: String!
let authorizedEntity = "my GCM Sender_ID"


public func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
var configureError:NSError?
GGLContext.sharedInstance().configureWithError(&configureError)
assert(configureError == nil, "Error configuring Google services: \(configureError)")
gcmSenderID = GGLContext.sharedInstance().configuration.gcmSenderID
// [END_EXCLUDE]
// Register for remote notifications
if #available(iOS 8.0, *) {
let settings: UIUserNotificationSettings =
UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)
application.registerUserNotificationSettings(settings)
application.registerForRemoteNotifications()
} else {
// Fallback
let types: UIRemoteNotificationType = [.Alert, .Badge, .Sound]
application.registerForRemoteNotificationTypes(types)
}

// [END register_for_remote_notifications]
// [START start_gcm_service]
let gcmConfig = GCMConfig.defaultConfig()
GCMService.sharedInstance().startWithConfig(gcmConfig)

return true
}

public func onTokenRefresh() {
print("Token needs to be refreshed!")
let options = [
kGGLInstanceIDRegisterAPNSOption : deviceToken!,
kGGLInstanceIDAPNSServerTypeSandboxOption : true
]
GGLInstanceID.sharedInstance().tokenWithAuthorizedEntity(authorizedEntity, scope: kGGLInstanceIDScopeGCM, options: options) { (token, error) -> Void in
if error != nil {
print("Error: \(error.localizedDescription)")
} else {
print("Token: \(token)")
}
}
}


public func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}

public func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
let instanceIDConfig = GGLInstanceIDConfig.defaultConfig()
instanceIDConfig.delegate = self
// Start the GGLInstanceID shared instance with that config and request a registration
// token to enable reception of notifications
GGLInstanceID.sharedInstance().startWithConfig(instanceIDConfig)
self.deviceToken = deviceToken
}

public func applicationDidEnterBackground(application: UIApplication) {
GCMService.sharedInstance().disconnect()
connectedToGCM = false
}

public func applicationDidBecomeActive( application: UIApplication) {
print("App became active")
UIApplication.sharedApplication().applicationIconBadgeNumber = 0
// Connect to the GCM server to receive non-APNS notifications
GCMService.sharedInstance().connectWithHandler({
(NSError error) -> Void in
if error != nil {
print("Could not connect to GCM: \(error.localizedDescription)")
} else {
self.connectedToGCM = true
print("Connected to GCM")
// ...
}
})
}

public func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
print("Notification received: \(userInfo)")
GCMService.sharedInstance().appDidReceiveMessage(userInfo)
}

public func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {
print("Error registering")
}

public func application( application: UIApplication,
didReceiveRemoteNotification userInfo: [NSObject : AnyObject],
fetchCompletionHandler handler: (UIBackgroundFetchResult) -> Void) {

print("Notification received(background): \(userInfo)")

NotificationManager.sharedInsteance().parseNotification(userInfo)

// This works only if the app started the GCM service
GCMService.sharedInstance().appDidReceiveMessage(userInfo);

// Handle the received message
// Invoke the completion handler passing the appropriate UIBackgroundFetchResult value
// [START_EXCLUDE]
handler(UIBackgroundFetchResult.NewData);
// [END_EXCLUDE]
}

更新

好的,所以我相信我弄乱了 .plist 位置(由于某种原因它不在根目录中)。我移动到根目录,现在在启动 GCM 时收到此警告/错误:

更新。好吧,它实际上只发生了一次就停止了。所以我认为问题不在这里。

在我将 .plist 移动到根目录后,onTokenRefresh() 调用停止了,但我仍然得到 NotRegistered。

Error

最佳答案

所以我解决了这个问题。看来我没有使用正确的 iOS 开发配置文件。我使用的是通用名称,而我需要使用特定名称作为我的包名称。发生这种情况的原因是因为我大约一周前重新安装了我的操作系统,所以其他证书被删除并且在我下载并手动将其添加到 Xcode 之前无法使用。我还需要从设备中删除团队配置文件。完全不是 GCM 或 APNs 的错。

关于ios - GCM IOS NotRegistered 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33296515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com