如何将独特的推送存储到sqlite数据库

时间:2014-11-11 05:52:44

标签: ios sqlite push-notification

-(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);
}
}

这就是我所知道的,请帮我存储每个推送通知而不重复。我的问题是推送通知重复。每当我触摸推送通知时,即使它已经存在,它也会添加到数据库中。

1 个答案:

答案 0 :(得分:1)

让我们直接进入sqlite查询:

"INSERT INTO NOTIFICATIONSTABLE(MESSAGE,TIME) VALUES (\"%@\",\"%@\")"

在查询中,您可以清楚地看到您没有对新记录使用任何唯一约束。

您需要添加主键字段以唯一标识每个通知。您不能使用autoincrement字段。

<强>建议:

收到任何远程通知时。下面的委托方法将被调用。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

它返回userInfo这是一个NSDictionary变量,它包含收到通知的详细信息。

从您的代码中我发现您从该字典中收到了"aps""alert"个值。在这里,您需要一个可以唯一标识通知的参数。它可能是datetimestampnotification id

因此,在数据库中,您可以在插入记录时使用此值。然后新的查询就像这样

"INSERT INTO NOTIFICATIONSTABLE(MESSAGE,TIME, NOTIFICATION_ID) VALUES (\"%@\",\"%@\",\"%@\")"

NOTIFICAION_ID用作数据库中所有通知的唯一约束。