我有一个iPhone应用程序我正在努力并试图让Amazon SNS设置为测试PNS。当我们向APNS注册应用程序时,它会提供一个32位的设备令牌(873DBDDA-17CF-4A24-88C6-990B90AFC4C3)。使用Amazon SNS注册设备时,它表示设备令牌必须为64位长。我在这里缺少什么?
答案 0 :(得分:10)
你是如何得到那个令牌的?它看起来不像正确的APNS设备令牌。真实的将是 64个十六进制数字。这是我使用的代码:
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSString *tokenstring = [[[deviceToken description]
stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]
stringByReplacingOccurrencesOfString:@" " withString:@""];
// pass tokenstring to your APNS server
}
我从该方法中获得的令牌如下所示:
8ec3bba7de23cda5e8a2726c081be79204faede67529e617b625c984d61cf5c1
答案 1 :(得分:0)
这是一个古老的问题,但我一直在寻找令牌的问题,而这个未得到回答的问题就出现了。这是我使用的 - AWS v2。
在问题erik-aigner
中7520615的帮助- (void)awsStartWithDeviceToken:(NSData *)deviceToken {
// Get a hex string for the NSData deviceToken
// https://stackoverflow.com/questions/7520615/how-to-convert-an-nsdata-into-an-nsstring-hex-string
NSUInteger dataLength = [deviceToken length];
NSMutableString *deviceTokenString = [NSMutableString stringWithCapacity:dataLength*2];
const unsigned char *dataBytes = [deviceToken bytes];
for (NSInteger idx = 0; idx < dataLength; ++idx) {
[deviceTokenString appendFormat:@"%02x", dataBytes[idx]];
}
_savedDeviceTokenFormatted = deviceTokenString;
}
答案 2 :(得分:0)
转换为十六进制字符串的Swift扩展
extension Data {
/// Return hexadecimal string representation of Data bytes
public var hexadecimalString: String {
var bytes = [UInt8](repeating: 0, count: count)
copyBytes(to: &bytes, count: count)
let hexString = NSMutableString()
for byte in bytes {
hexString.appendFormat("%02x", UInt(byte))
}
return String(hexString)
}
}