通过UIWebView将设备令牌发送到PHP脚本

时间:2014-03-24 15:09:38

标签: php ios iphone push-notification apple-push-notifications

我目前正在开发一个与圣地亚哥大都会交通系统一起使用的公交网络应用程序。对于iOS,我打算使用带有三个项目的TabBar,[主页] [收藏夹] [通知]。 [主页]指向主页面(以及任何其他页面),[收藏夹]是您可以设置您最喜欢的公共汽车/小车站的地方。

我计划将[收藏夹]设置为您可以在公交车到达MTS提供的预定时间之前设置发送给您的通知。因此,例如,如果一辆公共汽车要在10:30来到,并且你设置通知在5分钟前到达以提醒你,你将在10:25得到一个。

我想要将帐户与设备令牌相关联,我在这里阅读了一些问题,例如Linking user account to device token for push notifications

我相信当我登录时,可以通过将设备令牌发送到UIWebView来以某种方式链接帐户。

希望有人可以帮助我。

编辑: 以下是Home.m

中的Obj-C代码
#import "Home.h"

@implementation HomeViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSURL *URL1 = [NSURL URLWithString:@"url"];

    NSURLRequest *Request1 = [NSURLRequest requestWithURL:URL1];

    [webView1 loadRequest:Request1];

}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    NSLog(@"1");
    NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
    NSString *deviceToken = [defaults objectForKey:@"deviceToken"];
    bool tokenIsSent = [defaults boolForKey:@"tokenIsSent"];
    NSString *newToken = [defaults stringForKey:@"newToken"];
    NSLog(@"2");
    NSString *urlString = [NSString stringWithFormat:@"url"];
    NSURL *url = [[NSURL alloc] initWithString:urlString];
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
    NSData *usernameData;
    NSURLResponse *response;
    usernameData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:nil];
    NSString *username = [[NSString alloc] initWithData:usernameData encoding:NSUTF8StringEncoding];
    NSLog(@"3");

    if (deviceToken != nil && tokenIsSent == NO) {
        NSLog(@"4");
        NSString *urlString = [NSString stringWithFormat:@"url/s=%@&u=%@",newToken, username];
        NSURL *url = [[NSURL alloc] initWithString:urlString];
        NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
        NSData *urlData;
        NSURLResponse *response;
        urlData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:nil];
        NSString *info = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
        if([info  isEqual: @"success"]){
            [defaults setBool:YES forKey:@"tokenIsSent"];
            NSLog(@"5");
        }else{
            [defaults setBool:NO forKey:@"tokenIsSent"];
            NSLog(@"6");
        }
        [defaults synchronize];
    } else {
        NSLog(@"7");
    }

}

3 个答案:

答案 0 :(得分:2)

首先将令牌保存到NSUserDefaults

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:deviceToken forKey:@"deviceToken"];
    [defaults setBool:NO forKey:@"tokenIsSent"];
    [defaults synchronize];
}

因为这是在appDelegate中完成的,此时用户还没有登录,这就是为什么你需要跟踪使用其他值的原因,如上例tokenIsSent中所示,并将其设置为< strong> NO (false)。

现在,一旦用户进行身份验证,您就可以将其发送到服务器并与该用户关联。

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
bool deviceToken = [defaults boolForKey:@"deviceToken"];
bool tokenIsSent = [defaults boolForKey:@"tokenIsSent"];

if (deviceToken != nil && tokenIsSent) {
 // it is not null , and it was not sent to PHP so send it
        if(success){
            [defaults setBool:YES forKey:@"tokenIsSent"];
        }else{
            [defaults setBool:NO forKey:@"tokenIsSent"];
        }
        [defaults synchronize];
}

如果未调用delgate,则需要实现它:

@interface HomeViewController : UIViewController<UIWebViewDelegate>

并确保您指定该代表。

- (void)viewDidLoad
{
    [super viewDidLoad];

    //Assign the delegate to WebView1
    WebView1.delegate = self

    //Perform the request
    NSURL *URL1 = [NSURL URLWithString:@"http://clovercloud.net/app/f/"];
    NSURLRequest *Request1 = [NSURLRequest requestWithURL:URL1];
    [webView1 loadRequest:Request1];

}

答案 1 :(得分:0)

推送通知的注册是通过本机应用程序完成的,只能通过本机应用程序执行。有关详细信息,请参阅答案:

How can a web application send push notifications to iOS devices?

推送通知与某种视图无关。

答案 2 :(得分:0)

您可以将设备令牌存储在NSUserDefaults中。然后,您可以在iOS应用中从任何需要的地方访问它。因此,当您登录并将登录用户与设备令牌链接时,您可以传递给UIWebView