Ios 为什么当应用程序直接在设备中运行并创建ipa文件时,设备令牌的生成方式不同?

Ios 为什么当应用程序直接在设备中运行并创建ipa文件时,设备令牌的生成方式不同?,ios,iphone,apple-push-notifications,Ios,Iphone,Apple Push Notifications,在设备中运行我的应用程序时,我们获得的设备令牌不同,但生成的ipa相同的应用程序和安装到相同的设备上,但我们获得的设备令牌不同 以下是我们使用的代码: NSString *tempStr = [NSString stringWithFormat:@"%@",deviceToken]; NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; NSString *apnID = [tempSt

在设备中运行我的应用程序时,我们获得的设备令牌不同,但生成的ipa相同的应用程序和安装到相同的设备上,但我们获得的设备令牌不同

以下是我们使用的代码:

NSString *tempStr = [NSString stringWithFormat:@"%@",deviceToken]; 
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; 
NSString *apnID = [tempStr stringByReplacingOccurrencesOfString:@" " withString:@""]; 

NSLog(@"tempStr %@", tempStr); 
if(tempStr.length ==0)
{
   // for simulator 
   tempStr = @"123"; 
} 
[standardUserDefaults setObject:tempStr forKey:@"DeviceToken"];

请引导我们,这种行为背后的原因是什么

从您的代码片段来看,存储在userDefaults中的代码似乎没有被设备令牌的新值替换。您在设备控制台中获得的是正确的设备令牌。它反映了您的
NSLog(@“tempStr%@”,tempStr)和一个显示在Xcode运行直接是从用户
默认值。
[standardUserDefaults setObject:tempStr forKey:@“DeviceToken”]
更新:通常设备令牌的格式如下

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken{
NSLog(@"My token is: %@", deviceToken);
NSString *strDeviceToken=[NSString stringWithFormat:@"%@",deviceToken];
strDeviceToken=[strDeviceToken stringByReplacingOccurrencesOfString:@"<" withString:@" "];
strDeviceToken=[strDeviceToken stringByReplacingOccurrencesOfString:@">" withString:@" "];
strDeviceToken=[strDeviceToken stringByReplacingOccurrencesOfString:@" " withString:@""];
if(strDeviceToken.length ==0){
    // for simulator
    strDeviceToken = @"123";
}
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
[standardUserDefaults setValue:strDeviceToken forKey:@"DeviceToken"];   }
-(void)应用程序:(UIApplication*)应用程序DIDregisterforRemotionTificationswithDeviceToken:(NSData*)deviceToken{
NSLog(@“我的令牌是:%@”,deviceToken);
NSString*strDeviceToken=[NSString stringWithFormat:@“%@”,deviceToken];
strDeviceToken=[strDeviceToken STRINGBYREPLACINGOURCRENCESOFSTRING:@“with string:@]”;
strDeviceToken=[strDeviceToken STRINGBYREPLACINGOURCRENCESOFSTRING:@“with string:@]”;
if(strDeviceToken.length==0){
//用于模拟器
strDeviceToken=@“123”;
}
NSUserDefaults*standardUserDefaults=[NSUserDefaults standardUserDefaults];
[standardUserDefaults设置值:strDeviceToken forKey:@“DeviceToken”];}

如果您使用启用推送通知的开发配置文件,则它将从测试服务器“apple sandbox”中生成令牌;如果您使用分发配置文件,则它将从分发服务器中生成令牌,因此对于同一设备,两者都可能不同,取决于您使用的配置文件和服务器。但我在这两个位置使用了相同的配置文件证书开发人员证书扫描您共享方法didRegisterForRemotonentification的代码段?NSString*tempStr=[NSString stringWithFormat:@“%@”,deviceToken];NSUserDefaults*standardUserDefaults=[NSUserDefaults standardUserDefaults];NSString*apnID=[tempStr STRINGBYREPLACINGOCURNCESOFSTRING:@“带字符串:@]”;NSLog(@“tempStr%@”,tempStr);if(tempStr.length==0){//for simulator tempStr=@“123”}[standardUserDefaults setObject:tempStr-forKey:@“DeviceToken”];更新:在用户默认设置中为DeviceToken创建密钥后,您可以尝试“设置值”方法。谢谢。但同样的问题,请从设备中删除旧版本,并在我删除应用程序并创建存档后直接从Xcode重新运行第一次在设备中运行,生成运行到设备中的ipa文件我执行了此过程。但我正在为同一设备获取不同的设备令牌String*apnID=[tempStr stringByReplacingOccurrencesOfString:@”“with String:@”“];您是否已检查此apnID的值?