如何在 iOS 中注册 GCM
Posted
技术标签:
【中文标题】如何在 iOS 中注册 GCM【英文标题】:How to register for GCM in iOS 【发布时间】:2015-06-13 15:54:09 【问题描述】:我似乎无法让 GCM 推送通知正常工作。我的问题是我不知道如何从 GCM 获取注册 ID。我可以从 APN 获得令牌就好了。但我不太确定下一步该做什么。我尝试按照教程进行操作,但它并没有真正为我工作。我是初学者,所以请明确。
我要问的是,从 APN 获得令牌后,我该怎么办?
提前致谢。 https://developers.google.com/cloud-messaging/ios/client
【问题讨论】:
【参考方案1】:注册令牌从 didRegisterForRemoteNotificationsWithDeviceToken 提供给注册处理程序
以下所有代码均来自 Google 的 GCM 示例。
首先,在你的应用程序中声明一个处理程序:didFinishLaunchingWithOptions:
_registrationHandler = ^(NSString *registrationToken, NSError *error)
if (registrationToken != nil)
weakSelf.registrationToken = registrationToken;
NSLog(@"Registration Token: %@", registrationToken);
NSDictionary *userInfo = @@"registrationToken":registrationToken;
[[NSNotificationCenter defaultCenter] postNotificationName:weakSelf.registrationKey
object:nil
userInfo:userInfo];
else
NSLog(@"Registration to GCM failed with error: %@", error.localizedDescription);
NSDictionary *userInfo = @@"error":error.localizedDescription;
[[NSNotificationCenter defaultCenter] postNotificationName:weakSelf.registrationKey
object:nil
userInfo:userInfo];
;
在应用注册回调中调用你的处理程序:
- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
// Start the GGLInstanceID shared instance with the default config and request a registration
// token to enable reception of notifications
[[GGLInstanceID sharedInstance] startWithConfig:[GGLInstanceIDConfig defaultConfig]];
_registrationOptions = @kGGLInstanceIDRegisterAPNSOption:deviceToken,
kGGLInstanceIDAPNSServerTypeSandboxOption:@YES;
[[GGLInstanceID sharedInstance] tokenWithAuthorizedEntity:_gcmSenderID
scope:kGGLInstanceIDScopeGCM
options:_registrationOptions
handler:_registrationHandler];
要使用的 GCM 令牌只是注册处理程序中的“NSString *registrationToken”。
【讨论】:
是registrationToken那个,应该在服务器端用来识别通知的接收者吗?或者它只是在设备端与 GCM API 一起使用的身份验证令牌?这在 GCM iOS 文档中没有明确说明。 @Tapani,是的,那里收到的registrationToken是用于从服务器发送推送时识别收件人的。 不确定您是否可以提供帮助,但是当我从存档运行我的应用程序时,_registrationHandler = 代码不会运行并且我没有获得令牌。如果我从 xcode 直接运行到我的设备,它工作正常。有什么想法吗? 在didFinishLaunching 中的_registrationHandler 块回调之后,我将registrationToken 设为nil。任何的想法?我已经验证了我传递给 _registrationOptions 字典的 deviceToken 不是 nil。 @Jitesh,如果令牌为空,则错误对象应包含有关失败原因的一些信息以上是关于如何在 iOS 中注册 GCM的主要内容,如果未能解决你的问题,请参考以下文章
如何注册 GCM 和 APNS,获取 DeviceId 并将我的 API 发送给它以进行数据库存储?
我是不是需要注册 APN 才能在 iOS 中使用 GCM 推送通知?
GCM 服务器在哪个时间频率刷新注册 ID 以及如何在我的手机中获取 regId 更改事件?