Это продолжение моего предыдущего posting на StackOverflow.Проблема отправки уведомления Apple Push с использованием Java и REST
Подумал, что лучше начать новый пост (так как я сделал больше прогресса, чем раньше) вместо добавления нового вопроса в предыдущий поток.
Am с использованием библиотеки Javapns на Google Code, чтобы отправить Push Notification Apple, через REST на основе веб-службы ...
Вот шаги, которые я завершившие:
iPhone Developer Program Portal (IDPP):
(1) Создал идентификатор приложения и сертификат и ключи SSL на основе APNS.
(2) Создал и установил профиль подготовки.
(3) Установил сертификат и ключ SSL на сервере.
(4) Настройте приложение для iPhone, чтобы зарегистрироваться для удаленных уведомлений.
XCode:
был в состоянии получить мой маркер устройства, когда я построил и развернул мое приложение на устройстве.
Как только мое приложение iPhone развернуто, на моем iPhone появилось диалоговое окно, в котором говорилось, что мое приложение отправляет push-уведомления и также просит разрешения разрешить их.
Когда я вызывал свой веб-сервис через свои логические заявления Log4J, я смог убедиться, что мой веб-сервис на основе REST действительно был вызван, но я никогда не получал push-уведомления в своем приложении для iPhone!
ApnsManager класс:
public class ApnsManager {
/** APNs Server Host **/
private static final String HOST = "gateway.sandbox.push.apple.com";
/** APNs Port */
private static final int PORT = 2195;
public void sendNotification(String deviceToken)
throws Exception {
try {
PayLoad payLoad = new PayLoad();
payLoad.addAlert("My alert message");
payLoad.addBadge(45);
payLoad.addSound("default");
PushNotificationManager pushManager =
PushNotificationManager.getInstance();
pushManager.addDevice("iPhone", deviceToken);
log.warn("Initializing connectiong with APNS...");
// Connect to APNs
pushManager.initializeConnection(HOST, PORT,
"/etc/Certificates.p12", "password",
SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);
Device client = pushManager.getDevice("iPhone");
// Send Push
log.warn("Sending push notification...");
pushManager.sendNotification(client, payLoad);
pushManager.stopConnection();
}
catch (Exception e) {
e.printStackTrace("Unable to send push ");
}
}
}
RESTful Web Service:
@Path(ApnService.URL)
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public class ApnService {
public static final String URL = "/apns";
@GET
@Path("send")
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public String send() throws JSONException, IOException {
String msg = "";
try {
log.debug("Inside ApnService.send() method.");
log.debug("Sending notification to device");
ApnManager.sendNotification("32b3bf28520b977ab8eec50b482
25e14d07cd78 adb69949379609e40401d2d1de00000000738518e5c
000000003850978c38509778000000000000000000398fe12800398f
e2e0398fe1040000");
} catch(Exception e) {
e.printStackTrace();
msg = "fail";
}
msg = "success";
StringWriter sw = new StringWriter();
JsonFactory f = new JsonFactory();
JsonGenerator g = f.createJsonGenerator(sw);
g.writeStartObject();
g.writeStringField("status", msg);
g.writeEndObject();
g.close();
return sw.toString();
}
}
Теперь, когда я раскрываю мое приложение к моему серверу приложений и открыть клиент отдыха и введите:
http: // localhost: 8080/myapp/apns/send
клиент остальное возвращает это:
HTTP/1.1 200 OK
Следующая журнал сообщения выводятся на моей консоли:
01:47:51,985 WARN [ApnsManager] Initializing connectiong with APNS...
01:47:52,318 WARN [ApnsManager] Sending push notification...
MyAppDelegate.m
- (void) applicationDidFinishLaunching :
(UIApplication*) application
{
NSLog(@"LAUNCH");
// Configure REST engine
RESTAPI* api = [RESTAPI getInstance];
[api setNetworkAddress:kLocalAddress port:kDefaultPort];
UIRemoteNotificationType notificationTypes
= UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound;
if ([[UIApplication sharedApplication] enabledRemoteNotificationTypes]
!= notificationTypes) {
NSLog(@"Registering for remote notifications...");
[[UIApplication sharedApplication]
registerForRemoteNotificationTypes:notificationTypes];
} else {
NSLog(@"Already registered for remote notifications...");
// Uncomment this if you want to unregister
// NSLog(@"Unregistering for remote notifications...");
// [[UIApplication sharedApplication] unregisterForRemoteNotifications];
}
mainWindow = [[[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds] retain];
toolsNav = [[[ToolsNav alloc] init] retain];
[mainWindow addSubview:toolsNav.view];
[mainWindow makeKeyAndVisible];
}
Однако я не получаю push-уведомление в своем приложении (проживающее на моем iPhone)!
Am действительно тупик в этой точке ...
Что я мог делать неправильно? :(
Это проблема с тем, как я создал мой RESTful веб-сервиса (жаль, что я новичок в REST)?
бы очень признателен, если кто-то может помочь мне с этим ...
Спасибо, что нашли время, чтобы прочитать это ...
Строка токена содержит пробел. Был ли он введен, когда вы скопировали код здесь? Попробуйте удалить его. – notnoop
Привет, Саид ... Да, пространство с символьной строкой было введено, когда я скопировал код (и переформатировал код, чтобы сделать его более визуальным здесь). В моем фактическом коде нет места. Я все еще застрял, поэтому я был бы признателен, если бы кто-то помог мне с этим. У меня мало работает snitch, и когда я запускаю веб-сервис, он спрашивает меня, хочу ли я подключиться к порту 2195, и он отправляет push-уведомление. Он просто не отображается в приложении для iPhone. Есть ли что-то, что я делаю неправильно? Это код REST? –
Вы также должны включить код для методов «Обработка удаленных уведомлений» в UIApplicationDelegate, которые вы внедрили. – bpapa