doudou521125 2014-03-24 15:09
浏览 38
已采纳

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

I am currently working on a transit web app to be used with San Diego's Metropolitan Transit System. For iOS, I was planning on using a TabBar with three items, [Home] [Favorites] [Notifications]. [Home] leads to the main page (and to any other pages), [Favorites] is where you can setup your favorite bus/trolley stops.

I was planning on having [Favorites] be where you can setup a notification to be sent to you before a bus arrives at the scheduled times provided by MTS. So for example, if a bus were to come at 10:30 and you set a notification to arrive 5 minutes before to alert you, you would get one at 10:25.

I was wanting to link the accounts with the device tokens, and I read some of the questions on here such as Linking user account to device token for push notifications.

I believe it is possible to somehow link the accounts by sending the device token to the UIWebView when I login.

Hope someone can help me.

EDIT: Below is the Obj-C code in Home.m

#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条回答 默认 最新

  • drby30217 2014-03-24 15:50
    关注

    First save the token to the NSUserDefaults

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

    Because this is done in appDelegate, at this point the user is not logged in yet, that's why you need to track using something another value like in the example above tokenIsSent and set it to NO (false).

    Now once the user authenticates, you can then send it to your sever and associated with that user.

    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];
    }
    

    If the delgate is not being called you need to implement it:

    @interface HomeViewController : UIViewController<UIWebViewDelegate>
    

    And make sure you assign that delegate.

    - (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];
    
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法