Iphone 向服务器发送设备令牌
我已经阅读了很多这方面的教程,我只是想知道这是否是正确的方法Iphone 向服务器发送设备令牌,iphone,token,devicetoken,Iphone,Token,Devicetoken,我已经阅读了很多这方面的教程,我只是想知道这是否是正确的方法 - (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken { NSLog(@"My token is: %@", deviceToken); NSString* newToken = [deviceToken description];
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
NSLog(@"My token is: %@", deviceToken);
NSString* newToken = [deviceToken description];
newToken = [newToken stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
newToken = [newToken stringByReplacingOccurrencesOfString:@" " withString:@""];
NSString *urlString = [NSString stringWithFormat:@"http://myhost.com./filecreate.php?token=%@",newToken];
NSURL *url = [[NSURL alloc] initWithString:urlString];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
NSData *urlData;
NSURLResponse *response;
urlData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:nil];
}
-(void)应用程序:(UIApplication*)应用程序DIDregisterforRemotionTificationswithDeviceToken:(NSData*)deviceToken
{
NSLog(@“我的令牌是:%@”,deviceToken);
NSString*newToken=[deviceToken描述];
newToken=[newToken stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@”“];
newToken=[newToken StringByReplacingOfString:@“with String:@”的发生率];
NSString*urlString=[NSString stringWithFormat:@]http://myhost.com./filecreate.php?token=%@“,纽顿];
NSURL*url=[[NSURL alloc]initWithString:urlString];
NSURLRequest*urlRequest=[nsurlRequestRequestWithURL:url];
NSData*urlData;
NSURLResponse*响应;
urlData=[NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&响应错误:nil];
}
欢迎任何建议
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
const char* data = [deviceToken bytes];
NSMutableString* token = [NSMutableString string];
for (int i = 0; i < [deviceToken length]; i++) {
[token appendFormat:@"%02.2hhX", data[i]];
}
NSString *urlString = [NSString stringWithFormat:@"http://myhost.com/filecreate.php?token=%@",token];
NSURL *url = [[NSURL alloc] initWithString:urlString];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
NSData *urlData;
NSURLResponse *response;
urlData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:nil];
}
-(void)应用程序:(UIApplication*)应用程序DIDregisterforRemotionTificationswithDeviceToken:(NSData*)deviceToken
{
常量字符*数据=[deviceToken字节];
NSMutableString*标记=[NSMutableString];
对于(int i=0;i<[deviceToken length];i++){
[令牌格式:@“%02.2hhX”,数据[i]];
}
NSString*urlString=[NSString stringWithFormat:@]http://myhost.com/filecreate.php?token=%@“,代币];
NSURL*url=[[NSURL alloc]initWithString:urlString];
NSURLRequest*urlRequest=[nsurlRequestRequestWithURL:url];
NSData*urlData;
NSURLResponse*响应;
urlData=[NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&响应错误:nil];
}
我的应用程序可以使用这两种代码,但正确的方法是什么?正如mja在评论中所说,最好添加错误恢复机制(如果请求失败,您将丢失令牌)并使用异步请求(在后台发送令牌)
在AppDelegate.m中:
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
NSString * token = [NSString stringWithFormat:@"%@", deviceToken];
//Format token as you need:
token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];
token = [token stringByReplacingOccurrencesOfString:@">" withString:@""];
token = [token stringByReplacingOccurrencesOfString:@"<" withString:@""];
[[NSUserDefaults standardUserDefaults] setObject:token forKey:@"apnsToken"]; //save token to resend it if request fails
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"apnsTokenSentSuccessfully"]; // set flag for request status
[DataUpdater sendUserToken]; //send token
}
然后可以调用[DataUpdater sendUserToken];在控制器中,当internet连接出现时,或定期出现,或在-(void)viewdiload或-(void)viewwillearch方法中
我的建议是:
1) 我使用发送异步请求并检查服务器JSON响应
2) 有时,最好使用诸如在didFinishLaunchingWithOptions方法中使用推送通知之类的服务
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
完成以上代码行后,添加下面的方法
#pragma mark -
#pragma mark Push Notifications
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSString *token_string = [[[[deviceToken description] stringByReplacingOccurrencesOfString:@"<"withString:@""]
stringByReplacingOccurrencesOfString:@">" withString:@""]
stringByReplacingOccurrencesOfString: @" " withString: @""];
NSString* strURL = [NSString stringWithFormat:@"http://www.sample.com?device_token=%@&type=IOS",token_string];
strURL=[strURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@",strURL);
NSData *fileData = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]];
NSLog(@"content---%@", fileData);
}
#pragma标记-
#pragma标记推送通知
-(无效)应用程序:(UIApplication*)应用程序DIdRegisterForRemotionTificationswithDeviceToken:(NSData*)deviceToken
{
NSString*token_string=[[[[deviceToken description]stringByReplacingOccurrencesOfString:@''和string:@''一起出现
StringByReplacingOfString:@“和字符串:@]”发生;
NSString*strURL=[NSString stringWithFormat:@]http://www.sample.com?device_token=%@&类型=IOS”,标记_字符串];
strURL=[strURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@“%@”,strURL);
NSData*fileData=[NSData DATA WITHCONTENTSOFURL:[NSURL URLWithString:strURL]];
NSLog(@“内容-%@”,文件数据);
}
看起来不错,但是,我想1,添加错误恢复机制(如果请求失败,您将丢失您的令牌!)b,使用asynchronous request.asynchronous?这是什么意思?请给我一些关于错误恢复机制的指南。代码可以工作,但我想知道这是否是正确的方法,因为我在某个地方读过NSString*newToken=[deviceToken description]
这不是将数据输入字符串的正确方法。您的代码工作吗?我做了同样的事情,但我的设备令牌在发送到服务器时变成了(null)
。@tnylee您是否在NSLog中获得它?请尝试打印“urlString”就在发送到服务器并查看之前。打印响应以查看服务器端发生了什么。@Spire是的,我在NSLog中得到了它,我也删除了“”符号。它仍然是(null)
.Thx dude但这是一个非常古老的问题。我接受答案,这可能会对某人有所帮助。我认为您应该在存储信息后致电。didFinishLaunchingWithoptions中的代码必须添加才能获得推送通知
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
#pragma mark -
#pragma mark Push Notifications
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSString *token_string = [[[[deviceToken description] stringByReplacingOccurrencesOfString:@"<"withString:@""]
stringByReplacingOccurrencesOfString:@">" withString:@""]
stringByReplacingOccurrencesOfString: @" " withString: @""];
NSString* strURL = [NSString stringWithFormat:@"http://www.sample.com?device_token=%@&type=IOS",token_string];
strURL=[strURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@",strURL);
NSData *fileData = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]];
NSLog(@"content---%@", fileData);
}