2012-02-04 6 views
4

특정 사용자에게만 밀어 넣기 알림을 보내려고합니다.푸시 알림의 장치 토큰

Apple docs에서 내가 뭘로부터. 푸시 알림을 등록 코드는 .. 난 단지 DEVTOKEN가 만든 바이트보고 내가 어떤 사용자에 속해있는 장치 토큰을 식별하는 방법을 server..but에 보내 appdidRegisterForRemoteNotif 방법에있어서이

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

입니다. 내 장치 이름이 Shubhank의 iPhone 인 경우. iPhone이 있고 내 장치 토큰이라는 정보를 어떻게 보내면됩니까?

답변

6

일반적으로 대리인 메서드 자체에서는 서버의 apns 토큰을 업데이트하지 않습니다. 사용자를 식별 한 후에 나중에 저장하고 업데이트하십시오. 당신은 APNS는 모델 객체 (MyModel)에 토큰을 저장이와

- (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]; 

} 

:

당신은 이런 식으로 할 수 있습니다. 당신이 당신의 사용자가 식별 한 때 이상 (로그인으로/가입 또는 어떤 방법)

이 방법

[self sendProvidedDeviceToken: [[MyModel sharedModel] apnsToken] forUserWithId: userId]; //Custom method 

당신이 사용자와 장치 토큰을 연결 한이 방법을 호출 할 수 있습니다. 희망이 도움이!

+0

글쎄, 고마워요 내가 뭘 찾고 있었는지 해결 ...하지만 지금 중요한 질문이 있습니다 .. 토큰 바이트 때마다 응용 프로그램이 시작됩니다 .. ?? – Shubhank

+0

토큰이 변경됩니다 항상 사실은 아니지만, 그것은 항상 응용 프로그램이 시작될 때마다 토큰을 업데이트하는 것이 좋습니다. 도움이 되었으면 답을 upvote/accept하십시오. –

+0

나는 .. ..하지만 알고 싶다.이게 지금 나를 혼란 스럽다. 장치 토큰이 같다고하자. 그러면 장치가 내 서버에 다시 등록 될 것입니다. 그래서 덮어 쓰기 메커니즘을 개발해야합니까? 토큰이 바뀌면 ... 오래된 장치 이름을 어떻게 할 것인가 ?? – Shubhank

1

자신이 원하는 푸시 서비스에 필요한 정보를 보내주십시오.

중요한 점 : 푸시 토큰 장치 토큰 (UDID)이 아닙니다. 푸시 토큰은 요청하는 각 앱마다 고유하며 변경할 수 있습니다. 그 외에도 장치 이름을 얻고 싶으면 [[UIDevice currentDevice] name]으로 전화하여 푸시 토큰을 저장하는 데 사용중인 장치에 게시하십시오.

+0

내가 사용자에게 자신의 장치에 대한 특정 이름을 입력하여 ABC를 쓰는 텍스트 필드를 표시하게 할 수 있습니다. 하지만 난이 발생할 때까지 appdidRegisterForRemoteNotif 이미 호출되었을 것입니다 .. 그래서 내가 다시 밀어 넣기 알림을 등록 할 수 있습니까? – Shubhank

+0

아니요 - 푸시 토큰을 사용하고 나중에받은 후 백엔드 서비스에 장치 이름을 보내야합니다. – lxt

+0

[[UIApplication sharedApplication] registerForRemoteNotificationTypes : (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)]; 응용 프로그램이 시작될 때 this가 호출됩니다. idRegisterForRemoteNotificati도 내 사용자에게 텍스트 필드를 보여줄 수 있기 전에 호출됩니다. 그래서 .... 나는 [self sendProvider : Userinput]을 나중에 호출 할 수 있다고 말합니다. 하지만 서버에서이 이름이이 이름으로 올 것임을 어떻게 알 수 있습니까? devTokenBytes – Shubhank

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 
} 
+0

사용자가 자신의 장치에 특정 이름을 입력하여 ABC를 쓰는 텍스트 필드를 표시하게 할 수 있습니다. 하지만 난이 발생할 때까지 appdidRegisterForRemoteNotif 이미 호출되었을 것입니다 .. 그래서 내가 다시 밀어 넣기 알림을 등록 할 수 있습니까? – Shubhank

+2

장치를 등록하기 전에 사용자가 이름을 입력 할 때까지 기다리는 것이 더 좋습니다. 현재 응용 프로그램에서 사용자가 로그인 할 때까지 등록을 기다립니다. 시작할 때 등록해야하는 것은 없습니다. –

+0

[[UIApplication sharedApplication] registerForRemoteNotificationTypes : (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)]; 응용 프로그램이 시작될 때 this가 호출됩니다. idRegisterForRemoteNotificati도 내 사용자에게 텍스트 필드를 보여줄 수 있기 전에 호출됩니다. 그래서 .... 나는 [self sendProvider : Userinput]을 나중에 호출 할 수 있다고 말합니다. 하지만 서버에서이 이름이이 이름으로 오는지 어떻게 알 수 있습니까? devTokenBytes – Shubhank

관련 문제