2014-02-25 28 views
0

我试图将设备令牌传递给我的服务器,但面临一些问题,因为一切工作在我的数据库中它存储为空我不在这里我做错了。设备令牌传递给服务器空

-(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://localhost/pushnofiy/insert.php?token=%@",token]; 

     NSURL *url = [[NSURL alloc] initWithString:urlString]; 
     NSLog(@"token %@",urlString); 
     NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url]; 
     NSLog(@"request %@ ",urlRequest); 

     NSData *urlData; 
     NSURLResponse *response; 
     urlData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:nil]; 
    } 

如果我打印urlString其显示设备令牌,但我不知道为什么它不是在数据库中插入。

代码

<?php 

    mysql_connect(localhost,$username); 
    @mysql_select_db($database) or die("Unable to find Database");*/ 
    include "db.php"; 

    $token =$_GET["token"]; 

    $query = "INSERT INTO notifi (token) VALUES('$token')"; 

    mysql_query($query) or die (mysql_error("error")); 
    mysql_close(); 
?> 

我不知道是怎么回事错误的,我请人说不出哪里我做错了。

谢谢。

+0

*旁注:*停止使用已弃用的mysql_ *函数。改为使用[MySQLi](http://php.net/manual/en/book.mysqli.php)或[PDO](http://php.net/manual/en/book.pdo.php)。这是一个很好的[教程](http://j.mp/PoWehJ)PDO。此外,你的代码受到SQL注入攻击,你允许直接在查询中插入GET值。 – Raptor

+0

存储空字符串或未插入记录?您的PHP代码有语法错误,即无法运行。 – Raptor

+0

@ShivanRaptor请告诉我,在我们能帮忙之前,我会在什么地方做错的,它确实会帮助我们完整 – user3349668

回答

0

,最好添加错误恢复机制(如果请求失败,你会失去你的令牌),并使用异步请求(在后台发送令牌)

在你AppDelegate.m:

​​

要发送的令牌创建新类(或者利用现有的一个): DataUpdater.h

#import <Foundation/Foundation.h> 

@interface DataUpdater : NSObject  
+ (void)sendUserToken; 
@end 

DataUpdater.m

#import "DataUpdater.h" 

@implementation DataUpdater 

+ (void)sendUserToken { 
    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"apnsTokenSentSuccessfully"]) { 
     NSLog(@"apnsTokenSentSuccessfully already"); 
     return; 
    } 

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://myhost.com/filecreate.php?token=%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"apnsToken"]]]; //set here your URL 

    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url]; 
    NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 

    [NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 
    { 
     if (error == nil) { 
      [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"apnsTokenSentSuccessfully"]; 
      NSLog(@"Token is being sent successfully"); 
      //you can check server response here if you need 
     } 
    }]; 
} 

@end 

然后,你可以调用[DataUpdater sendUserToken]在你的控制器时,互联网连接出现,或定期或在- (无效)viewDidLoad中或 - (无效)viewWillAppear中方法

我的建议: 1)我用AFNetworking发送异步请求,并检查服务器JSON响应 2)有时候最好使用Parse等服务来处理推送通知

+0

我已经尝试过我们的代码也不工作 – user3349668

+0

@ user3349668 U上面的代码? – Raju

+0

只有相同的代码我已经使用buts不为我工作 – user3349668

相关问题