我已使用Parse发送和接收推送通知。我已经仔细地按照教程并成功实现了它。 现在,我需要在用户选择的特定里程内向用户发送通知。
例如:如果用户选择 100 ,则应将通知发送给已安装我的应用的所有用户,并且距离用户100英里(用户是广播通知)当前位置。
我在Parse的网站上找到了相同的代码片段,但如果我使用下面代码中注释的第二个查询,我没有收到任何通知
如果我使用第二个查询,则不会调用方法didReceiveRemoteNotification
。只有当我使用第一个查询时,我才能成功收到通知。
我对Push通知和Parse更新。让我知道,如果我错过了一些愚蠢的东西,以便我可以解决它。我已经在很长一段时间内解决这个问题所以请各位帮忙。
PFGeoPoint *myLoc = [PFGeoPoint geoPointWithLatitude:myLatitude longitude:myLongitude];
PFQuery *userQuery = [PFUser query];
[userQuery whereKey:@"location"
nearGeoPoint:myLoc
withinMiles:100];
PFQuery *myQuery = [PFInstallation query];
[myQuery whereKey:@"deviceType" equalTo:@"ios"];
//[myQuery whereKey:@"user" matchesQuery:userQuery];
NSDictionary *data = [NSDictionary dictionaryWithObjectsAndKeys:
txt.text, @"alert",
@"1", @"badge",
@"sound.caf", @"sound",
nil];
PFPush *push = [[PFPush alloc] init];
[push setQuery:myQuery];
[push setData:data];
[push sendPushInBackground];
答案 0 :(得分:5)
我在其中一个项目中做过同样的事情,希望以下代码和步骤对您有所帮助。
首先在您的Appdelgate's
方法didRegisterForRemoteNotificationsWithDeviceToken
中填写以下代码段
[PFGeoPoint geoPointForCurrentLocationInBackground:^(PFGeoPoint *geoPoint, NSError *error) {
if (!error) {
NSLog(@"User is currently at %f, %f", geoPoint.latitude, geoPoint.longitude);
PFInstallation *currentInstallation = [PFInstallation currentInstallation];
[currentInstallation setDeviceTokenFromData:deviceToken];
currentInstallation[@"location"] = geoPoint;
[currentInstallation saveInBackground];
} else {
NSLog(@"%@", error);
return;
}
}];
并将以下代码段放在您要向其他人发送通知的位置
PFInstallation *installation = [PFInstallation currentInstallation];
NSLog(@"%@",installation);
[PFGeoPoint geoPointForCurrentLocationInBackground:^(PFGeoPoint *geoPoint, NSError *error)
{
if (!error)
{
PFQuery *userQuery = [PFInstallation query];
[userQuery whereKey:@"location"
nearGeoPoint:geoPoint
withinMiles:100.00];
NSString *str_CurrentDeviceToken = [NSString stringWithFormat:@"%@",[installation objectForKey:@"deviceToken"]];
[userQuery whereKey:@"deviceToken" notEqualTo:str_CurrentDeviceToken];
NSLog(@"%@",userQuery);
NSDictionary *data = [NSDictionary dictionaryWithObjectsAndKeys:
@"Hello", @"alert",
@"1", @"badge",
@"", @"sound",
nil];
PFPush *push = [[PFPush alloc] init];
[push setQuery:userQuery];
[push setData:data];
[push sendPushInBackground];
}
else
{
NSLog(@"%@", error);
return;
}
}];