-(void)application:(UIApplication *)application didReceiveRemoteNotification: (NSDictionary *)userInfo
{
NSDictionary *local_dictionary=userInfo;
NSLog(@"\n\n%@",local_dictionary);
NSArray *push_array=[userInfo valueForKey:@"aps"];
NSLog(@"%@",push_array);
NSString *alert=[push_array valueForKey:@"alert"];
NSLog(@"%@",alert);
if (alert)
{
sqlite3_stmt *statement = NULL;
const char *databasepath=[dbpath UTF8String];
if (sqlite3_open(databasepath, &sqlite_object)==SQLITE_OK)
{
NSDate *currentTime = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMM dd, yyyy HH:mm"];
NSString *resultString = [dateFormatter stringFromDate: currentTime];
NSLog(@"%@",resultString);
NSString *insertSQL=[NSString stringWithFormat:@"INSERT INTO NOTIFICATIONSTABLE(MESSAGE,TIME) VALUES (\"%@\",\"%@\")",alert,resultString];
NSLog(@"%@",insertSQL);
const char *insert_stmnt=[insertSQL UTF8String];
sqlite3_prepare_v2(sqlite_object, insert_stmnt, -1, &statement, NULL);
if (sqlite3_step(statement)==SQLITE_DONE)
{
NSLog(@"POSITIVE");
}
else
{
NSLog(@"NEGATIVE");
}
}
sqlite3_finalize(statement);
sqlite3_close(sqlite_object);
}
}
这就是我所知道的,请帮我存储每个推送通知而不重复。我的问题是推送通知重复。每当我触摸推送通知时,即使它已经存在,它也会添加到数据库中。
答案 0 :(得分:1)
让我们直接进入sqlite查询:
"INSERT INTO NOTIFICATIONSTABLE(MESSAGE,TIME) VALUES (\"%@\",\"%@\")"
在查询中,您可以清楚地看到您没有对新记录使用任何唯一约束。
您需要添加主键字段以唯一标识每个通知。您不能使用autoincrement
字段。
<强>建议:强>
收到任何远程通知时。下面的委托方法将被调用。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
它返回userInfo
这是一个NSDictionary
变量,它包含收到通知的详细信息。
从您的代码中我发现您从该字典中收到了"aps"
和"alert"
个值。在这里,您需要一个可以唯一标识通知的参数。它可能是date
,timestamp
或notification id
。
因此,在数据库中,您可以在插入记录时使用此值。然后新的查询就像这样
"INSERT INTO NOTIFICATIONSTABLE(MESSAGE,TIME, NOTIFICATION_ID) VALUES (\"%@\",\"%@\",\"%@\")"
NOTIFICAION_ID
用作数据库中所有通知的唯一约束。