2015-11-05 362 views
1

在我的應用我試圖收到推送通知,我創建了一個證書,並將其轉化爲.pem文件中的終端測試,並複製證書到服務器,當我發送通知從服務器它沒有在設備端收到。 我的如下沒有收到推送通知 - IOS

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
// Override point for customization after application launch. 


if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)]) 
{ 
    // iOS 8 Notifications 
    [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]]; 

    [application registerForRemoteNotifications]; 
} 
else 
{ 
    // iOS < 8 Notifications 
    [application registerForRemoteNotificationTypes: 
    (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)]; 
} 
} 
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
{ 

NSString *str = [NSString stringWithFormat:@"%@",deviceToken]; 

NSString *newString = [str stringByReplacingOccurrencesOfString:@" " withString:@""]; 
newString = [newString stringByReplacingOccurrencesOfString:@"<" withString:@""]; 
newString = [newString stringByReplacingOccurrencesOfString:@">" withString:@""]; 


    NSData *postData = [[NSString stringWithFormat:@"regId=%@", newString] dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 

    NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]]; 

    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
    [request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"<myurl>"]]]; 

    [request setHTTPMethod:@"POST"]; 

    [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 

    [request setHTTPBody:postData]; 

    NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self]; 

} } 

服務器端代碼代碼

$message = 'Hello'; 
$badge = 3; 
$sound = 'default'; 
$development = true; 

$payload = array(); 
$payload['aps'] = array('alert' => $message, 'badge' => intval($badge), 'sound' => $sound); 
$payload = json_encode($payload); 

$apns_url = NULL; 
$apns_cert = NULL; 
$apns_port = 2195; 

if($development) 
{ 
$apns_url = 'gateway.sandbox.push.apple.com'; 
$apns_cert = '/path/to/cert/cert-dev.pem'; 
} 
else 
{ 
$apns_url = 'gateway.push.apple.com'; 
$apns_cert = '/path/to/cert/cert-prod.pem'; 
} 

$stream_context = stream_context_create(); 
stream_context_set_option($stream_context, 'ssl', 'local_cert', $apns_cert); 

$apns = stream_socket_client('ssl://' . $apns_url . ':' . $apns_port, $error, $error_string, 2, STREAM_CLIENT_CONNECT, $stream_context); 

// You will need to put your device tokens into the $device_tokens array yourself 
$device_tokens = array(); 

foreach($device_tokens as $device_token) 
{ 
$apns_message = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $device_token)) . chr(0) . chr(strlen($payload)) . $payload; 
fwrite($apns, $apns_message); 
} 

@socket_close($apns); 
@fclose($apns); 
+0

你有沒有做過任何調試?對蘋果公司的要求是否成功?如果不是,那麼錯誤是什麼?如果有,設備上發生了什麼?查看https://developer.apple.com/library/ios/technotes/tn2265/_index.html中的調試步驟。 – Avi

+0

當我從服務器發送通知時,它顯示「交付成功」但設備沒有收到任何通知 –

回答

2

有可能是在開發者帳戶的一些證書問題,或者可能是你的設備是不是在供應增加的個人資料。您可以通過重新創建配置文件來檢查它。