這是我之前在StackOverflow上的posting的後續操作。使用Java和REST發送Apple推送通知時出現問題
更好地開始一個新的職位(因爲我比以前做了更多的進步),而不是在以前的線程上附加一個新的問題。
正在使用谷歌代碼的Javapns庫發送通過一個基於REST的Web服務的蘋果推送通知......
這裏是我已完成的步驟:
iPhone開發者計劃門戶網站( IDPP):
(1)創建了基於App ID和APNS的SSL證書和密鑰。
(2)創建並安裝配置文件。
(3)在服務器上安裝SSL證書和密鑰。
(4)設置我的iPhone應用程序以註冊遠程通知。
的XCode:
能夠獲得我的設備令牌,當我構建和部署我的應用程序到我的設備。
只要我的iPhone應用程序部署完成,對話框就出現在我的iPhone上,表明我的應用程序想要發送推送通知,並且還要求允許它們。
當我通過Log4J語句調用我的Web服務時,我能夠看到基於REST的Web服務確實被調用,但我從未在我的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服務:
@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();
}
}
現在,當我在我的應用程序部署到我的應用程序服務器,並打開了一個REST客戶端並鍵入:
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];
}
但是,我沒有收到我的應用程序(駐留在我的iPhone上)的推送通知!
我真的難住在這一點上...
我可能會做錯什麼? :(
它是與我建立了我的RESTful Web服務的方式有問題(對不起,我是新手休息)?
會很感激,如果有人可以幫助我這個...
感謝您在百忙之中閱讀本文時...
令牌字符串包含一個空格。當你在這裏複製代碼時引入了它嗎?嘗試刪除它。 – notnoop 2009-09-03 15:55:48
嗨,Saeed ...是的,當我複製代碼(並重新設置了代碼以使其更具視覺效果)時,引入了令牌字符串的空間。在我的實際代碼中沒有空間。我仍然卡住,所以我會很感激,如果有人可以幫助我這一點。我有一點小小的跑步,當我運行Web服務時,它詢問我是否希望連接到端口2195併發送推送通知。它只是不會出現在我的iPhone的應用程序。有什麼我做錯了嗎?它是REST代碼嗎? – 2009-09-04 09:53:49
您還應該包含您已實施的UIApplicationDelegate的「處理遠程通知」方法的代碼。 – bpapa 2009-09-04 13:47:35