我只想向某些用户发送推送通知。
从我在Apple文档中经历的内容。 注册推送通知的代码是
- (void)applicationDidFinishLaunching:(UIApplication *)app {
// other setup tasks here....
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
}
// Delegation methods
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken {
const void *devTokenBytes = [devToken bytes];
self.registered = YES;
[self sendProviderDeviceToken:devTokenBytes]; // custom method
}
- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
NSLog(@"Error in registration. Error: %@", err);
}
在方法appdidRegisterForRemoteNotif
中..我看到只创建了devToken字节并发送到服务器..但是我如何识别哪个设备令牌属于哪个用户。所以,如果我的设备名称是Shubhank的iPhone。如何发送我的iPhone的信息,这是我的设备令牌。
答案 0 :(得分:6)
通常,您不会在委托方法本身更新服务器上的apns标记。保存它并在以后识别用户时更新它。
你可以这样做:
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken {
const unsigned *tokenBytes = [deviceToken bytes];
NSString *hexToken = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",
ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];
[[MyModel sharedModel] setApnsToken:hexToken];
}
用这个你在模型对象(MyModel)中保存了apns标记。稍后当您确定用户时(通过登录/注册或任何方法)
你可以调用这个方法
[self sendProvidedDeviceToken: [[MyModel sharedModel] apnsToken] forUserWithId: userId]; //Custom method
这样您就可以将设备令牌与用户相关联。希望这有帮助!
答案 1 :(得分:2)
您需要在自定义方法中注册时发送设备名称。代码应如下所示。如果应用程序使用某种类型的用户名,您可以发送适合您的上下文的任何信息,例如用户名。您可以决定将哪些信息发送到您的服务器,以便在令牌和设备之间建立连接。
// Delegation methods
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken {
const void *devTokenBytes = [devToken bytes];
self.registered = YES;
[self sendProviderDeviceToken:devTokenBytes deviceName:[[UIDevice currentDevice] name]]; // custom method
}
答案 2 :(得分:1)
您可以将自己需要的任何信息发送到自己的推送服务中。
但重要的一点是:推送令牌不是设备令牌(UDID)。推送令牌对于请求它们的每个应用程序都是唯一的,并且可以并且确实可以更改。如果您想获取设备名称,可以拨打[[UIDevice currentDevice] name]
,然后将其发布到用于存储推送令牌的任何内容中。