我目前正在开发一个用于圣地亚哥大都会交通系统的交通网络应用程序。对于 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
#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/