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

우선 tokenIsSent 이상이고 NO (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]; 
} 
위양 당신이 그것을 구현할 필요가 호출되고 있지 않은 경우

:

@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

는 현재 이러한있는 UIWebView에서'$ _SESSION [ '이름'] '로 세션 변수에 설정되어있는 것을 요청하고 다음과 같은 네이티브 코드에서 PHP 스크립트에 사용자 이름을 보내고 토큰 수 없습니다 'registertoken.php? u = 사용자 이름 & 토큰 = 토큰'? – alexpja

+0

@alexpja APNS에서 장치 토큰을 가져와야하고 원하는 곳에서 보낼 수 있으며 PHP와 관련이 없습니다. 설명서 (https://developer.apple)를 참조하십시오. – FreeGor

+0

현재 장치 자체에서 장치 토큰을 받고'didRegisterForRemoteNotificationsWithDeviceToken'에서 PHP 스크립트로 보내도록 NSURLRequest를 만듭니다. 작동하는지 확인하기 위해 스크립트에 연결했는데 알림을 보내고 GET 변수's'를 사용하고 있습니다. 응용 프로그램을 Xcode에서 내 iPad로 이동하면 iPhone이 장치 토큰으로 알림을 받았습니다. 무슨 뜻인지 확실치 않습니다. – alexpja

0

NSUserDefaults에 장치 토큰을 저장할 수 있습니다. 그런 다음 iOS 앱에서 필요할 때마다 액세스 할 수 있습니다. 따라서 로그인하여 장치 토큰과 로그인 한 사용자를 연결할 때 UIWebView으로 전달할 수 있습니다. 이것은 사용자가 아직 로그인하지 않은이 시점에서, appDelegate에서 수행되기 때문에 다른 값의 예처럼 뭔가를 사용하여 추적해야하는 이유, 즉 년대 NSUserDefaults

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

에 토큰을 저장

관련 문제