Последние пару недель пытался настроить PushNotification с базовым приложением Phonegap 2.
Вот шаги, которые я сделал.
Перетащите папку PushNotification в папку с плагинами:
(источник: joelchu.com)Следуйте следующей инструкции в документации
(источник: joelchu.com)Добавьте PushNotifcation/PushNotification в раздел
Cordova.plist
плагиновИзмените
AppDelegate.m
:- (void) dealloc { [super dealloc]; } /* START PUSH MODIFCATION */ #pragma PushNotification delegation - (void)application:(UIApplication*)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken { PushNotification* pushHandler = [self.viewController getCommandInstance:@"PushNotification"]; [pushHandler didRegisterForRemoteNotificationsWithDeviceToken:deviceToken]; } - (void)application:(UIApplication*)app didFailToRegisterForRemoteNotificationsWithError:(NSError*)error { PushNotification* pushHandler = [self.viewController getCommandInstance:@"PushNotification"]; [pushHandler didFailToRegisterForRemoteNotificationsWithError:error]; } - (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo { PushNotification* pushHandler = [self.viewController getCommandInstance:@"PushNotification"]; NSMutableDictionary* mutableUserInfo = [userInfo mutableCopy]; // Get application state for iOS4.x+ devices, otherwise assume active UIApplicationState appState = UIApplicationStateActive; if ([application respondsToSelector:@selector(applicationState)]) { appState = application.applicationState; } [mutableUserInfo setValue:@"0" forKey:@"applicationLaunchNotification"]; if (appState == UIApplicationStateActive) { [mutableUserInfo setValue:@"1" forKey:@"applicationStateActive"]; [pushHandler didReceiveRemoteNotification:mutableUserInfo]; } else { [mutableUserInfo setValue:@"0" forKey:@"applicationStateActive"]; [mutableUserInfo setValue:[NSNumber numberWithDouble: [[NSDate date] timeIntervalSince1970]] forKey:@"timestamp"]; [pushHandler.pendingNotifications addObject:mutableUserInfo]; } } /* END PUSH MODIFICATION */ @end
ПЕРВАЯ ОШИБКА
Неизвестное имя типа PushNotification
Поэтому я добавляю эту строку сразу после последнего импорта:
#import "PushNotification.h"
Это решает проблему.
СЛЕДУЮЩАЯ ПРОБЛЕМА
Файл CDVPlugin.h не найден
Поэтому я добавляю следующее в User Header Search Paths — ко всем настройкам сборки:
$(CORDOVALIB)/Classes (recursive)
СЛЕДУЮЩАЯ ПРОБЛЕМА
Затем выдает более 20 ошибок!
(источник: joelchu.com)
Что я сделал не так?
Искал везде вверх и вниз. К моему удивлению, кажется, что ни у кого нет проблем.
Подробнее о моей настройке:
- Телефонная щель 2.0
- XCode 4.5 (предварительная версия 4)
- База iOS 6 (сборка приложения для iOS 5 и выше)
Надеюсь, что кто-то там получил ответ. Спасибо.
(P.S. если плагин Phonegap PushNotification сломан - они уже 4 месяца не обновляются. Есть ли бесплатная альтернатива? Еще раз спасибо)
Я описал ту же проблему на мой блог.
ИСПРАВЛЕНО (ПОКА)
ИСПРАВЛЕНО
/* START BLOCK */
#pragma PushNotification delegation
- (void) application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
PushNotification* pushHandler = [self.viewController getCommandInstance:@"PushNotification"];
[pushHandler didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}
- (void) application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
PushNotification* pushHandler = [self.viewController getCommandInstance:@"PushNotification"];
[pushHandler didFailToRegisterForRemoteNotificationsWithError:error];
}
- (void) application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{
PushNotification* pushHandler = [self.viewController getCommandInstance:@"PushNotification"];
NSMutableDictionary* mutableUserInfo = [userInfo mutableCopy];
// Get application state for iOS4.x+ devices, otherwise assume active
UIApplicationState appState = UIApplicationStateActive;
if ([application respondsToSelector:@selector(applicationState)]) {
appState = application.applicationState;
}
[mutableUserInfo setValue:@"0" forKey:@"applicationLaunchNotification"];
if (appState == UIApplicationStateActive) {
[mutableUserInfo setValue:@"1" forKey:@"applicationStateActive"];
[pushHandler didReceiveRemoteNotification:mutableUserInfo];
} else {
[mutableUserInfo setValue:@"0" forKey:@"applicationStateActive"];
[mutableUserInfo setValue:[NSNumber numberWithDouble: [[NSDate date] timeIntervalSince1970]] forKey:@"timestamp"];
[pushHandler.pendingNotifications addObject:mutableUserInfo];
}
}
/* STOP BLOCK */
Что я сделал - первые два
- (void)application:(UIApplication*)app
изменился на
- (void) application:(UIApplication*)application
и я перемещаю
#import "PushNotification.h"
в заголовок блока (вместо непосредственно перед кодом изменения - это вызывает проблему @end не в контексте).
Я еще не запускал интерфейс javascript. Но все ошибки ушли.
Спасибо.