APNS 장치 토큰이 생성되면 변경됩니까?
푸시 알림 장치 토큰이 생성되면 변경됩니까?
앱이 업데이트되는 예 ? 또는 다른 경우에는 변경할 수 있습니까 ??
이 토큰 신뢰 단계의 형식은 APN만이 나중에 존중할 토큰을 생성하도록 보장하며, 장치가 전달한 토큰이 이전에 특정 장치에 대해 프로비저닝 된 것과 동일한 토큰임을 스스로 보장 할 수 있습니다. 그 장치를 위해.
사용자가 백업 데이터를 새 장치로 복원하거나 운영 체제를 다시 설치하면 장치 토큰이 변경됩니다.
이 점에 대한 Apple의 공식 문서는 명확하지 않습니다. 내가 관찰 한 것은 이것이다 : 토큰은 주어진 장치, 응용 프로그램 및 도메인 (프로덕션 대 샌드 박스)에 대해 변하지 않습니다. 시스템이 안정적으로 작동하려면 이것이 사실로 유지되어야한다고 생각합니다. 애플리케이션 업데이트가 새 APN 토큰을 트리거하는 상황을 고려하십시오. 알림이 활성화 된 트위터와 유사한 가장 멋진 앱을 사용하고 있다면 iTunes에서 앱을 업데이트하면 어떻게됩니까? 업데이트를 장치에 "동기화"한 후 응용 프로그램을 실행하지 않은 경우에도 알림이 계속 전송 될 것으로 예상해야합니까? 업데이트 된 앱을 실행하지 않은 경우에도 OS가 사용자를 대신하여 알림을받을 수 있으므로 애플리케이션을 변경하는 행위는 APN 시스템에 영향을 미치지 않습니다.
분명히 애플은 "애플리케이션은 시작할 때마다 [APN 서버에] 등록해야하며 공급자에게 현재 토큰을 제공해야합니다."라고 말합니다. 전적으로 동의합니다. 이렇게하면 잘못된 가정이나 비정상적인 상황으로부터 애플리케이션을 보호 할 수 있습니다.
푸시 알림 토큰은 단일 장치의 모든 앱에서 고유합니까? 에 대한 답변 중 하나입니다 . 장치 토큰이 "운영 체제 설치"별로 고유함을 나타냅니다. 백업에서 장치로 복원하면 토큰이 유지되지만 장치를 지우면 새 토큰을 얻게됩니다. 이는 원활한 작동 및 개인 정보 보호에 대한 Apple의 의도와 전적으로 일치합니다. 장치를 지우는 것은 새로운 연결이 필요할 수있을만큼 심각하지만 OS 업데이트 후 이미지를 복원하는 사용자는 기존 알림을 보존하기를 원할 것입니다. iPad에서 최근 iOS5 업데이트를 기억하면 업그레이드 후 가장 최근 백업을 복원했기 때문에 알림 토큰의 일관성이 유지되었을 것입니다. [편집 : 백업을 다른 위치로 복원 장치는 토큰을 복제하지 않습니다.]
주의 사항 :이 주제에 대한 명확한 지식이 없으며 APN (타사 개발자)으로 작업 한 합리적인 경험이 있습니다. 항상 그렇듯이 가정을 확인하는 것이 가장 좋습니다.
업데이트 (2012 년 6 월) :
저는 최근에 a> Apple 엔지니어와 이야기하고 b> 실제 테스트를 실행할 수있는 기회가 있었고 결과를 발표하고 싶었습니다.
완료하기 위해 APN 토큰 반환에 대해 이야기 할 때 단일 번들 식별자 / 애플리케이션의 컨텍스트를 가정합니다.
첫째, Apple 엔지니어는 두 장치가 동일한 APN을 반환하는 것이 가능하지 않아야한다고 말했습니다. 아래의 설명에도 불구하고 이것이 실패하는 상황을 식별 할 수 없었습니다.
둘째, 다음은 업그레이드 테스트 순서 및 결과입니다.
iPhone4에 설치된 iOS4로 시작하십시오. iTunes의 백업 장치
iOS5로 업그레이드
이전 테스트에서 APN 토큰이 이제 다르다는 것을 알고 있습니다.장치에 백업 복원
APN 토큰은 이제 1 단계와 동일합니다.iOS 재설정 (깨끗한 장치)
APN 토큰 변경다른 전화를 iTunes에 백업하고 해당 백업을 테스트 장치로 복원하십시오. 기본적으로 전화를 바꾸는 것처럼 "잘못된"백업을 복원하고 있습니다.
APN 토큰이 다시 변경됩니다. 또한 그것은 고유하고 원래 토큰 또는 "복제 된"토큰과 일치하지 않습니다.장치에 "올바른"백업을 복원하십시오.
APN 토큰은 이제 1 단계와 동일합니다.마지막으로 휴대 전화를 iOS6 (베타 2)로 업그레이드하고 백업을 복원하고 다시 테스트했습니다. 예상대로 토큰은 1 단계의 토큰과 계속 일치했습니다.
이 시점에서 저는 APN 토큰을 다른 장치간에 복제 할 수 없다고 확신합니다. 아마도 이것은 이전 버전의 iOS에서 버그로 발생했을 수 있지만 iOS5 (그리고 아마도 iOS6)가 APN 토큰을 올바르게 처리하고 있다고 확신합니다.
업데이트 (2012 년 8 월)
나는 이것을 추가하지 않았다는 것을 깨달았습니다. 장치 토큰 이 변경됩니다. Apple 개발자 중 한 명이 토큰이 실제로 만료된다는 사실을 공유했습니다 (2 년 후). 많은 목적을 위해 이것은 불변으로 생각할 수있을만큼 충분히 길다.
[특히 매년 휴대폰을 교체하기 때문에 2 년마다 새로운 토큰으로 테스트 스크립트를 업데이트해야하는지 걱정하지 않습니다.]
앱을 다시 설치 하면 iOS9 및 APN 푸시 토큰 변경 사항으로 방금 테스트했습니다 .
예 , 기기 토큰이 변경 될 수 있습니다.
앱은 토큰을받을 때마다이를 저장해야합니다. 새로운 토큰이 수신 될 때마다 그런 다음, (이 것입니다 서로 다른 경우에 발생, 결국), 저장된 토큰에 새 토큰을 비교 :
- 장치의 로컬 저장소를 업데이트합니다 (일 수 있음
nil
). - 새 토큰을 인식하기 위해 토큰을 사용하는 장치의 모든 항목을 업데이트합니다.
- 이 토큰을 인식하는 API를 새 토큰으로 업데이트하십시오.
실제적으로 마지막 단계는 사소하지 않을 가능성이 가장 높습니다. 예를 들어 기기가 구독 한 우편 번호를 기반으로 기기 토큰에 날씨 알림을 보내는 서비스가있는 경우 전달 을 업데이트 할 수 있도록 해당 서비스에 old_token
및 을 전달해야합니다 new_token
.
Ergo, generally speaking 100% of APIs accepting a "device token" must also have some kind of UPDATE
facility for that token. To not build for this is to build for mis-delivered and non-delivered notifications.
Device token does change from iOS 8 and later
Please see text below from Apple website. Registering, Scheduling, and Handling User Notifications
The device token is your key to sending push notifications to your app on a specific device. Device tokens can change, so your app needs to reregister every time it is launched and pass the received token back to your server. If you fail to update the device token, remote notifications might not make their way to the user’s device. Device tokens always change when the user restores backup data to a new device or computer or reinstalls the operating system. When migrating data to a new device or computer, the user must launch your app once before remote notifications can be delivered to that device.
It shouldn't change, unless your app is restored onto a new device (at which point it won't be asked to accept push notifications again, and will simply send you the registered call at which point you should accept the new token).
But Apple doesn't guarantee that it never changes (hence the documentation never mentions it). You better program for the worst and assume it may change one day. Also, sending a token to your server regularly enables you to remove tokens that haven't registered for a while, and have probably deinstalled your app or lost interest a while ago (and the documentation does specify this as wanted behavior!).
Links quickly become obsolete with apple! so i'm quoting what seems to be quite clear now :
Never cache device tokens in your app; instead, get them from the system when you need them. APNs issues a new device token to your app when certain events happen. The device token is guaranteed to be different, for example, when a user restores a device from a backup, when the user installs your app on a new device, and when the user reinstalls the operating system. Fetching the token, rather than relying on a cache, ensures that you have the current device token needed for your provider to communicate with APNs. When you attempt to fetch a device token but it has not changed, the fetch method returns quickly.
I think it is worth mentioning as nobody did it that the token changes after you have called unregisterForRemoteNotifications
. When you call registerForRemoteNotifications
next time the token is different. I failed to find any confirmation of this in the Apple docs but I witnessed such a behavior myself. Please keep this in mind
APNs can issue a new device token for a variety of reasons:
User installs your app on a new device
User restores device from a backup
User reinstalls the operating system
Other system-defined events
As a result, apps must request the device token at launch time.
Refer - Apple Docs
NB: APNs device tokens are of variable length. Do not hard-code their size.
As reference to Apple push notification stuff
The device token is your key to sending push notifications to your app on a specific device. Device tokens can change, so your app needs to reregister every time it is launched and pass the received token back to your server. If you fail to update the device token, remote notifications might not make their way to the user’s device. Device tokens always change when the user restores backup data to a new device or computer or reinstalls the operating system. When migrating data to a new device or computer, the user must launch your app once before remote notifications can be delivered to that device.
Never cache a device token; always get the token from the system whenever you need it. If your app previously registered for remote notifications, calling the registerForRemoteNotifications method again does not incur any additional overhead, and iOS returns the existing device token to your app delegate immediately. In addition, iOS calls your delegate method any time the device token changes, not just in response to your app registering or re-registering.
According to this link the device token
The device token included in each request represents the identity of the device receiving the notification. APNs uses device tokens to identify each unique app and device combination. It also uses them to authenticate the routing of remote notifications sent to a device. Each time your app runs on a device, it fetches this token from APNs and forwards it to your provider. Your provider stores the token and uses it when sending notifications to that particular app and device. The token itself is opaque and persistent, changing only when a device’s data and settings are erased. Only APNs can decode and read a device token.
Yes it can change. Ideally when ever we receive a token via the callback method
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
The app should register / refresh the token on the remote server. This will ensure that the token on the APNS and your server is kept in sync.
As per Apple documentation,
Obtaining and handling an app-specific device token works as follows:
Your app registers with APNs for remote notifications When a new device token is needed, APNs generates one using information contained in the device’s certificate. It encrypts the token using a token key and returns it to the device, as shown in the middle, right-pointing arrow. The system delivers the device token back to your app by calling your application:didRegisterForRemoteNotificationsWithDeviceToken: delegate method. Upon receiving the token, your app (within the delegate method) must forward it to your provider in either binary or hexadecimal format. Your provider cannot send notifications to the device without this token. For details, see Registering to Receive Remote Notifications in Configuring Remote Notification Support.
The device token relay on the installation of the app.
It means that if you reinstall the application, it changes; it doesn't metter if you do it from a backup, an iOS upgrade ecc..
The right way to use it, to avoid any problem, is to get the one given on the NSPAppDelegate
at each application launch, in the method didRegisterForRemoteNotificationsWithDeviceToken
참고URL : https://stackoverflow.com/questions/6652242/does-the-apns-device-token-ever-change-once-created
'developer tip' 카테고리의 다른 글
Ruby에서 기존 해시에 추가하는 방법 (0) | 2020.08.29 |
---|---|
glyphicons-halflings-regular.woff2 찾을 수 없음에 대한 오류를 제거하는 방법 (0) | 2020.08.29 |
JQuery UI 자동 완성 도우미 텍스트를 제거 / 변경하는 방법은 무엇입니까? (0) | 2020.08.29 |
Android에서 문자열 너비를 얻는 방법은 무엇입니까? (0) | 2020.08.29 |
탐색 창에서 선택한 메뉴 항목의 색상 변경 (0) | 2020.08.29 |