Приложение 42: push-уведомления не приходят на устройство ios

Контекст:
Я пытаюсь перенести приложение cocos2d-x(v.3.8.1) из Parse в App42. Все хорошо, кроме push-уведомлений.
Что я делаю:
Я следую этому руководству:

Создайте совместимые с App42 сертификаты.p12, используя .p12->.pem->.p12 преобразование
- загрузить эти сертификаты в App42, они выделены зеленым цветом на сервере
- загрузите и установите последнюю версию App42 SDK ver.2.1 для Cocos2d-x
- зарегистрировать push-уведомления в Appcontroller.mm:

 -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    …
        // Register for Push Notitications
        App42API::Initialize(APP42_KEY, APP42_SECRET);
        if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) {
            UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIRemoteNotificationTypeBadge
                                                                                                 |UIRemoteNotificationTypeSound
                                                                                                 |UIRemoteNotificationTypeAlert) categories:nil];
            [application registerUserNotificationSettings:settings];
            [application registerForRemoteNotifications];
        } else {
            UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound;
            [application registerForRemoteNotificationTypes:myTypes];
        }
        …
}

 -(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    NSString * deviceTokenString = [[[[deviceToken description]
                                      stringByReplacingOccurrencesOfString: @"<" withString: @""]
                                     stringByReplacingOccurrencesOfString: @">" withString: @""]
                                    stringByReplacingOccurrencesOfString: @" " withString: @""];
    app42->saveDeviceToken([deviceTokenString UTF8String]); // app42 is my singleton class for App42 methods
}

 -(void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
    [application registerForRemoteNotifications];
}

 -(void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
    NSLog(@"Failed to get token, error: %@", error);
}

App42 с APNS в моем синглтоне App42Methods:

void App42Methods::saveDeviceToken(string _deviceToken)
{
    int tag = TAG_DEVICE_TOKEN;
    deviceToken = _deviceToken;
    string userName = deviceToken.substr(0, 25);

    PushNotificationService::Initialize(APP42_KEY, APP42_SECRET);
    DeviceType deviceType = APP42_IOS;
    PushNotificationService* pushNotificationService = PushNotificationService::getInstance();
    pushNotificationService->RegisterDeviceToken(_deviceToken.c_str(), userName.c_str(), deviceType, app42callback(App42Methods::onPushRequestCompleted, this));
}

void App42Methods::onPushRequestCompleted(void *response)
{
    App42PushNotificationResponse *pushResponse = (App42PushNotificationResponse*)response;
    if (pushResponse->isSuccess)
    {
        log("Push notification service registered!");
    }
    else
    {
        printf("\nerrordetails:%s",pushResponse->errorDetails.c_str());
        printf("\nerrorMessage:%s",pushResponse->errorMessage.c_str());
        printf("\nappErrorCode:%d",pushResponse->appErrorCode);
        printf("\nhttpErrorCode:%d",pushResponse->httpErrorCode);
    }
}

Итак, процесс регистрации в порядке. я получил "Push notification service registered!" в логах, на сервере App42 Cloud API -> Unified Notifications -> Push Users Я вижу созданного пользователя с правильным токеном устройства.
Я выбираю его на сервере и нажимаю на него уведомление, это уведомление отображается как отправленное. Но я могу получать любые уведомления на моем устройстве.
Я пытался сделать:
Я попытался использовать плагин push-уведомлений для Cocos2d-x с тем же результатом.
Также я использовал APN Tester, он логи «Failure performing handshake, error code -9806»,
Я также могу попробовать App42 SDK для iOS, но это приведет к переписыванию всего класса App42Methods. Я хотел бы избежать этого.
Push-уведомления работали нормально на Parse.com.

Пожалуйста, скажите мне, что я делаю не так? Кажется, App42 не подключается к APNS, но я понятия не имею, почему.
Любая помощь будет оценена.

1 ответ

Решение

Проблема рукопожатия обычно возникает из-за проблемы в файле p12. Вы можете сослаться на этот пост для того же. Я предложу вам воссоздать ваш файл.p12, следуя тому же руководству, и попробуйте. Если вы все еще сталкиваетесь с проблемой, вы можете написать на support@shephertz.com или на форуме сообщества App42 для быстрого решения.

Другие вопросы по тегам