私はPhonegapアプリケーションに取り組んでいます。プッシュ通知を実装するために、iOS 用のプラグイン (github の AppDelegate+Notification および PushNotification ファイル) を使用し、APN にデバイスを登録することに成功し、MAC マシンのターミナルを使用して (.php ファイルを使用して) プッシュ通知を送信することができました。
アプリケーションがアクティブ モードの場合、「didReceiveRemoteNotification」ブロック内で通知を受け取ることができます。また、通知センターからの通知をタップすると、このメソッドが実行されます。
私が直面している問題は次のとおりです。
- アプリが通知クリックからアクティブ化されている間 (バックグラウンド状態)、「didReceiveRemoteNotification」から Notification.js 関数呼び出しを取得するにはどうすればよいですか?
アプリは関数を呼び出すことができるため:
1. AppDelegate+Notification.m
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
NSLog(@"didReceiveRemoteNotification AppDelegate+Notification.h :%@", 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;
}
if(appState == UIApplicationStateActive) //Active state
{
NSLog(@"UIApplicationStateActive");
[mutableUserInfo setValue:@"1" forKey:@"applicationStateActive"];
[pushHandler didReceiveRemoteNotification:mutableUserInfo];
}
else // BG state
{
NSLog(@"UIApplicationStateBackground");
[mutableUserInfo setValue:@"0" forKey:@"applicationStateActive"];
[mutableUserInfo setValue:[NSNumber numberWithDouble: [[NSDate date] timeIntervalSince1970]] forKey:@"timestamp"];
[pushHandler.pendingNotifications addObject:mutableUserInfo];
}
[[UIApplication sharedApplication] cancelAllLocalNotifications];
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
}
2. PushNotification.m
- (void)didReceiveRemoteNotification:(NSDictionary*)userInfo {
NSLog(@"didReceiveRemoteNotification : %@", userInfo);
// Converting Dict to NSString in JSON format using NSJSONSerialization as per Cordova 2.4.0
NSError* error = nil;
NSString *jsStatement = nil;
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:userInfo options:0 error: &error];
if (error != nil)
{
jsStatement = [NSString stringWithFormat:@"window.plugins.pushNotification.notificationCallback({error: %@});",[error localizedDescription]];
}
else
{
jsStatement = [NSString stringWithFormat:@"window.plugins.pushNotification.notificationCallback(%@);", [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]];
}
[self writeJavascript:jsStatement];
}
3. PushNotification.js
PushNotification.prototype.notificationCallback = function(notification) {
alert ('JS notificationCallback');
}
すでにアクティブな状態で通知が来た場合。最後のステップのアラートが発生する (JS notificationCallback)
または簡単な方法で、ios プラグインから Java スクリプト関数を呼び出すにはどうすればよいですか?