2014-03-24 78 views
0

我目前正在研究與聖地亞哥大都會交通系統一起使用的交通網絡應用程序。對於iOS,我打算使用帶有三個項目的TabBar,[主頁] [收藏夾] [通知]。 [主頁]導向主頁面(以及任何其他頁面),[收藏夾]是您可以設置您最喜愛的公共汽車/小車停靠點的地方。通過UIWebView將設備令牌發送到PHP腳本

我打算在[收藏夾]中設置一條通知,在公交車到達MTS提供的預定時間之前發送給您。例如,如果一輛公共汽車在10點30分到達,並且你設置了一個通知在5分鐘前到達以提醒你,你會在10:25得到一個。

我想將帳戶與設備令牌關聯起來,並且我閱讀了一些關於此處的問題,例如Linking user account to device token for push notifications

我相信有可能在我登錄時通過發送設備令牌到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"); 
    } 

} 

回答

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並將其設置爲(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]; 

} 
+0

如果你看看我在FreeGor的答案中所做的評論,你是否認爲結合這個答案和'NSURLRequest',我可以成功地將該帳戶鏈接到設備? – alexpja

+0

@alexpja當設備註冊推送服務時,您不知道哪個賬戶與該設備相關聯,所以一旦用戶通過身份驗證,首先保存它比執行'NSURLRequest' – meda

+0

好的,我會給它一個去吧背部。 – alexpja

0

所述的OBJ-C代碼推送通知的註冊是通過一個本機應用程序完成的,只能通過一個本機應用程序來執行。欲瞭解更多詳情,請參閱答案:

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

推送通知是不是有某種觀有關。

+0

是沒可能要求什麼是在一個會話變量當前設置,比如'$ _SESSION [「用戶名」]'在一個UIWebView,然後發送用戶名和令牌PHP腳本在本地代碼,如'registertoken.php?U = USERNAME&記號= TOKEN'? – alexpja

+0

@alexpja你應該從APNS獲得設備令牌,然後你可以從任何你想要的地方發送它,而且它與PHP無關。請參閱文檔:https://developer.apple。com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html – FreeGor

+0

我目前從設備本身和'didRegisterForRemoteNotificationsWithDeviceToken'獲得設備令牌,並將其發送到我的PHP腳本。爲了驗證它的工作原理,我將它鏈接到了我用來發送通知和GET變量's'的腳本。將應用從Xcode運行到我的iPad上,我的iPhone收到設備令牌的通知。 不知道你在說什麼。 – alexpja

0

您可以將設備令牌存儲在NSUserDefaults中。然後,您可以在iOS應用程序中隨時隨地訪問它。因此,當您登錄並將登錄的用戶與設備令牌鏈接時,您可以傳遞給UIWebView

相關問題