php - 通过 UIWebView 将设备 token 发送到 PHP 脚本

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

我目前正在开发一个用于圣地亚哥大都会交通系统的交通网络应用程序。对于 iOS,我计划使用包含三个项目的 TabBar,[Home] [Favorites] [Notifications]。 [Home] 指向主页(以及任何其他页面),[Favorites] 是您可以设置您最喜欢的公共(public)汽车/电车站的地方。

我计划在 [收藏夹] 中设置一个通知,以便在公共(public)汽车按 MTS 提供的预定时间到达之前发送给您。因此,例如,如果一辆公共(public)汽车将在 10:30 到达,而您将通知设置为提前 5 分钟到达以提醒您,您将在 10:25 到达。

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

我相信可以通过在登录时将设备 token 发送到 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");
    }

}

最佳答案

首先将 token 保存到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 并将其设置为 NO(假)。

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

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

如果委托(delegate)没有被调用,你需要实现它:

@interface HomeViewController : UIViewController<UIWebViewDelegate>

并确保您分配了该委托(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];

}

关于php - 通过 UIWebView 将设备 token 发送到 PHP 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22613211/

相关文章:

ios - 更改 UITabBarController 中选项卡的宽度以调整第六个选项卡

iphone - 选项卡推送通知 cocos2d 游戏崩溃

iphone - 用于 UIImageView/UIView 时如何调整使用 resizableImageWithCapInsets 创建的 UIImage 的大小

php - 使用渲染(或链接)方法查看 Laravel 错误,结合 2 个查询

php - 未找到 ActiveRecord\MysqliAdapter

c# - 使用背景更改的多选 ListView

iphone - iOS : If app is not running in background, 调用 openURL 在启动时崩溃应用程序

iOS 项目设置中指定的主 Storyboard在哪里?

php - json_encode 不显示 HTML

php - 应用下载器 Like soft32.com