如何在 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 发送给它以进行数据库存储?

如何在应用程序中正确更新 GCM 注册 ID

我是不是需要注册 APN 才能在 iOS 中使用 GCM 推送通知?

GCM 服务器在哪个时间频率刷新注册 ID 以及如何在我的手机中获取 regId 更改事件?

如何从应用服务器向 GCM 服务器发送发送重新注册请求以注册设备?

如何将 GCM 注册 ID 唯一地存储到 MySQL 中