use*_*104 3 notifications push-notification amazon-web-services apple-push-notifications ios
我最近使用Amazon SNS推送我的IOS应用程序的通知.
它运作良好,我遇到的唯一问题是当我收到通知时,徽章编号将不会更新,这是我的实现方式:
首先,我按照这里的示例 https://aws.amazon.com/articles/9156883257507082 这是教程中的示例代码.
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
application.applicationIconBadgeNumber = 0;
NSString *msg = [NSString stringWithFormat:@"%@", userInfo];
NSLog(@"%@",msg);
[[Constants universalAlertsWithTitle:@"Push Notification Received" andMessage:msg] show];
}
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//Register for push notification
application.applicationIconBadgeNumber = 0;
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
if(launchOptions!=nil){
NSString *msg = [NSString stringWithFormat:@"%@", launchOptions];
NSLog(@"%@",msg);
[[Constants universalAlertsWithTitle:@"Push Notification Received" andMessage:msg] show];
}
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
Message_BoardViewController *boardViewController = [Message_BoardViewController new];
UINavigationController *navigationController = [UINavigationController new];
navigationController.navigationBar.translucent = NO;
[navigationController pushViewController:boardViewController animated:NO];
[boardViewController release];
self.window.rootViewController = navigationController;
[navigationController release];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque];
[self.window makeKeyAndVisible];
// Logging Control - Do NOT use logging for non-development builds.
#ifdef DEBUG
[AmazonLogger verboseLogging];
#else
[AmazonLogger turnLoggingOff];
#endif
[AmazonErrorHandler shouldNotThrowExceptions];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,从教程代码中可以看出
application.applicationIconBadgeNumber = 0;
Run Code Online (Sandbox Code Playgroud)
很明显它每次都会变成0.
================================================== ====
我想知道更新徽章编号的标准方法是什么?
哪个appoarch是正确的?
1)通过这样的编程 application.applicationIconBadgeNumber = 0;
2)或者从这样的服务器有效载荷?
$body = array(
'alert' => $message,
'sound' => 'sound.caf',
'badge' => $badge_count // Should be int type
);
Run Code Online (Sandbox Code Playgroud)
================================================== ======
但是,我发现每个apporach都有障碍,对于1),didReceiveNotification应用程序处于后台时不会触发,所以我不能做application.applicationIconBadgeNumber++;更新徽章编号的事情.
对于2),亚马逊SNS服务只返回
$body = array(
'alert' => $message,
);
Run Code Online (Sandbox Code Playgroud)
并且只是服务器如何知道徽章编号并将其添加到服务器有效负载,似乎我仍然需要将更新徽章编号发布到Amazon didReceiveNotification并将其添加到有效负载.但同样,它并没有在后台打电话.
对不起新的IOS编程,有些经验的程序员请指导我用推送通知实现徽章编号更新吗?谢谢.
您应该在推送通知的有效负载中发送徽章编号.您的服务器应设置徽章计数.这样,无论应用程序是否正在运行(无论用户是否点击通知以打开应用程序),徽章计数都将更新.您的服务器应该知道要发送的号码.
至于您的服务器应该如何知道要发送的徽章编号 - 我不知道您的应用程序的逻辑,但我们以电子邮件应用程序为例 - 假设您希望徽章编号显示存在多少未读邮件.应用程序应在读取消息时通知服务器,以便服务器可以为每个用户维护正确的徽章编号.这样,即使用户有多种方式来访问数据(iPhone应用程序,iPad应用程序,桌面浏览器等等),服务器也会知道当前的徽章数量,并且每个设备都会显示正确的徽章数量.
将application.applicationIconBadgeNumber = 0意味着一旦应用程序被打开,清除徽章.它应该在这两个做didReceiveRemoteNotification和didFinishLaunchingWithOptions,因此当应用程序启动的徽章数量将永远被清除,或当推送通知是由应用程序处理.
| 归档时间: |
|
| 查看次数: |
4812 次 |
| 最近记录: |