2013-07-10 5 views
0

Я застрял в очень неприятной проблеме.Как написать код сервера APNs в scala?

Я работаю с javaPNS и следую за одним из многочисленных руководств в Интернете.

Здесь: https://code.google.com/p/javapns/wiki/PushNotificationAdvanced

/* Push your custom payload */ 
    List<PushedNotification> notifications = Push.payload(payload, keystore, password, production, devices); 

где вы видите это, выше. В нем говорится, что Push.payload() возвращает список с нажатымNotificaion. Ну, это не в моем коде.

object Push { 

def devPush(pushAlertMessage: String, badgeNumber: Int, devices: Seq[String]): List[PushedNotification] = { 

//Retrieve the .p12 certification file 
val keystoreFile = getClass.getResourceAsStream("keystorefile.p12") 

//Create payload 
val payload = PushNotificationPayload.complex() 
payload.addBadge(badgeNumber) 
payload.addAlert(pushAlertMessage) 
payload.addSound("default") 

// 
val notifications:List[PushedNotification] = javapns.Push.payload(payload, keystoreFile, keystorePassword, false, devices) 

for(notification <- javapns.Push.alert(pushAlertMessage, keystoreFile, keystorePassword, false, devices).getFailedNotifications){ 
    /* Add code here to remove invalid tokens from database */ 
} 

notifications 
} 
} 

Когда я пытаюсь поставить список в моих VAL уведомлений с Push.payload он говорит:

«Экспресс PushedNotifications типа не соответствует ожидаемому список типа [PushedNotification]»

Я устал и смущен, но не уверен в остальной части кода. Поблагодарили бы за любую помощь и, пожалуйста. Исправьте мой код, если я ошибаюсь.

+0

просто обернуть значение PushedNotifications типа в список – 4lex1v

ответ

1

Вам не хватает неявного преобразования из возвращаемого java.util.List и scala List, которое вы хотите. Попробуйте добавить следующий импорт:

import scala.collection.JavaConversions._ 

И подправить эту строку:

val notifications:List[PushedNotification] = javapns.Push.payload(payload, keystoreFile, keystorePassword, false, devices) 

Для этого:

val notifications:List[PushedNotification] = javapns.Push.payload(payload, keystoreFile, keystorePassword, false, devices).toList 

Кроме того, похоже, что вы будете нажимать два раза на каждое устройство здесь как призывы к payload и alert оба push-уведомления на устройства. Если вы только действительно хотели послать сложную полезную нагрузку, что вы строите, то ваш код, вероятно, следует:

val results = javapns.Push.payload(payload, keystoreFile, keystorePassword, false, devices) 

for(notification <- result.getFailedNotifications.toList){ 
    /* Add code here to remove invalid tokens from database */ 
} 
+0

Македонского, только то, что искали! Спасибо @cmbaxter. Вы видите, есть ли какие-либо другие проблемы в моем коде? У меня нет возможности проверить это прямо сейчас :( – raxelsson

+0

@RobertAxelsson, я обновил свой пост ... – cmbaxter

+0

Ofcourse, спасибо вам ответить. Теперь я вижу, что мой код не логика вообще. Я не хочу дважды нажать :) – raxelsson

Смежные вопросы