首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过UIWebView将设备令牌发送到PHP脚本

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

Stack Overflow用户
提问于 2014-03-24 15:09:37
回答 3查看 1.5K关注 0票数 0

我目前正在开发一个用于圣地亚哥大都会交通系统的中转网络应用程序。对于iOS,我计划使用一个包含三个项的TabBar,即家庭通知。主页通向主页(和任何其他页面),收藏夹是您可以设置您最喜欢的公共汽车/无轨电车站的地方。

我计划有收藏,在那里,您可以设置一个通知发送给您,在公共汽车到达预定时间提供的MTS。例如,如果一辆公共汽车在10点30分来,而你设置一个通知在5分钟前到达,提醒你,你会在10点25分得到一辆。

我想把帐户和设备令牌联系起来,我在这里读到了一些问题,比如Linking user account to device token for push notifications

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

希望有人能帮我。

编辑:下面是Home.m中的Obj代码

代码语言:javascript
运行
复制
#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");
    }

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-24 15:50:07

首先将令牌保存到NSUserDefaults

代码语言:javascript
运行
复制
-(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 (false)。

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

代码语言:javascript
运行
复制
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,则需要实现它:

代码语言:javascript
运行
复制
@interface HomeViewController : UIViewController<UIWebViewDelegate>

确保你指派了那个代表。

代码语言:javascript
运行
复制
- (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
EN

Stack Overflow用户

发布于 2014-03-24 15:25:11

push通知的注册是通过本地应用程序完成的,并且只能通过本地应用程序执行。如需更多详情,请参阅答案:

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

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

票数 0
EN

Stack Overflow用户

发布于 2014-03-24 15:36:13

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22613211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档