IOS企业版版本更新以及推送pem的生成

发布新版本时需要注意的问题:

1.XCODE工程修改版本号。
2.打包后,替换服务器中IPA文件。
3.修改ios_update.php文件,里面的版本号,更新内容。
4.修改push.php中推送的内容。

推送需要准备的东西:

开发P12 、 开发推送证书
推送P12 、发布推送证书

开发推送证书的命令

需要的两个文件aps_development.cer、Push.p12

1.openssl x509 -in aps_development.cer -inform der -out PushChatCert.pem
2.openssl pkcs12 -nocerts -out PushChatKey.pem -in Push.p12
3.cat PushChatCert.pem PushChatKey.pem > ck.pem
4、telnet gateway.sandbox.push.apple.com 2195
5. openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem

发布推送证书的命令

需要的两个文件 aps_production.cer 、Push.p12(和开发的不同)

openssl x509 -in aps_production.cer  -inform der -out PushChatCert.pem
openssl pkcs12 -nocerts -out PushChatKey.pem -in Push.p12
cat PushChatCert.pem PushChatKey.pem > ck.pem
telnet gateway.push.apple.com 2195 
openssl s_client -connect gateway.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem

推送IOS端代码

#pragma mark - 推送设置   // Register for Push Notitications, if running iOS 8
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) {
        
        UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert |  UIUserNotificationTypeBadge | UIUserNotificationTypeSound);
        
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
        [application registerForRemoteNotifications];
    } else {
        // Register for Push Notifications before iOS 8
        
        [application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |  UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)];
    }
}

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
    
    NSString* newToken = [[[NSString stringWithFormat:@"%@",deviceToken]
                           stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]] stringByReplacingOccurrencesOfString:@" " withString:@""];
    NSLog(@"nsdata:%@\n 字符串token: %@",deviceToken, newToken);// 获取device token
    // 上传devicetoken
    [_netUtils requestContentWithUrl:DEVICE_TOKEN para:@{@"appleID": newToken} withSuccessBlock:^(id returnData) {
        NSLog(@"%@",returnData);
    } withFailureBlock:^(NSError *error) {
        NSLog(@"%@",error);
    }];
    
}
-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{
    NSLog(@"RegistFail%@",error);
  
}

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
    // 处理推送消息
    NSLog(@"收到推送消息:%@",[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]);
    if (application.applicationIconBadgeNumber > 0) {
        application.applicationIconBadgeNumber  = 0;
    }
}

IOS端检查更新代码

-(void)getUpdate:(updateBlock)completonBlock  // 检查更新
{
    __unsafe_unretained NetUtils *netUtil = self;// 防止循环应用
    
    [netUtil GetContentWithUrl:UPDATE_URL withSuccessBlock:^(id returnData) {
       
        if ([returnData[@"verCode"] isEqualToString:kVersion_Coding]) {
            // 不用更新
            
        }
        else{
            // 提示更新
            UIAlertView *testView = [[UIAlertView alloc] bk_initWithTitle:@"有新版本" message:returnData[@"content"]];
            
            [testView bk_addButtonWithTitle:@"取消" handler:^{
            }];
            [testView bk_addButtonWithTitle:@"更新" handler:^{
                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:IPAURL]];

            }];
            [testView show];
            
        }
     
    } withFailureBlock:^(NSError *error) {
        //NSLog(@"%@",error);
    }];
}


服务器端代码:

db.php


link = @mysql_connect("{$host}:{$port}",$user,$pwd,true);
        if(!$this->link) {
            die("Connect Server Failed: " . mysql_error());
        }
        /*连接成功后立即调用mysql_select_db()选中需要连接的数据库*/
        if(!mysql_select_db($dbname,$this->link)) {
            die("Select Database Failed: " . mysql_error($this->link));
        }
        mysql_query("SET NAMES 'UTF8'");
    }
  
    public function db_insert($sql)
    {
        $ret = mysql_query($sql,$this->link);
        if(!$ret){
            $this->error_state = 1;
        }
        return $ret;
    }
    
    
    public function db_select($sql)
    {   
        return db_insert($sql);
    }
  
    public function db_delete($sql)
    {
        return db_insert($sql);
    }
  
    //查询后返回数组
    public function db_array($sql)
    {
        $arr = mysql_query($sql,$this->link);
        $result = array();
        while ($arrTemp = @mysql_fetch_assoc($arr)) {
            $result[] = $arrTemp ;
        }
        return $result;     
    }
  
  // 关闭连接数据库
    public function closeDB()
    {
        mysql_close($this->link);
    }
  
  
    //事物处理 
    //开始事物
    public function db_start_substance()
    {
        mysql_query("BEGIN" ,$this->link);
        $this->error_state = 0;
    }
    //提交事物/回滚事物
    public function db_commit_substance()
    {
        if($this->error_state == 1){
            mysql_query("ROLLBACK",$this->link);
        }else{
            mysql_query("COMMIT",$this->link);
        }
        return $this->error_state;
    }
 
}

?>

存储IOS设备的device token

 
db_array($sqlApple);
if($sqlResult){
   exit("exit");
}else{
  $sql = "insert into appleDevice (appleID) values ('$appleID') ";
  $result = $db_obj->db_insert($sql);
 if($result){
    $arr  = array('result' => 'success' );
    echo json_encode($arr);
  }else{
    $arr  = array('result' => 'fail' );
    echo json_encode($arr);

}
}

?>

检查更新代码

'app','verCode'=>'1.0.10','content'=>'活动详情展示。');
echo json_encode($arr);
?>

发布推送的代码

 db_array($sql);
 
$countArray = count($result); 
 
$passphrase = 'zhaojian';
$message = '生产-推送-测试!'; 
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
$fp = stream_socket_client(
    'ssl://gateway.push.apple.com:2195', $err,
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

if (!$fp)
    exit("Failed to connect: $err $errstr" . PHP_EOL);
 
echo 'Connected to APNS' . PHP_EOL;
 
$body['aps'] = array(
    'alert' => $message,
    'sound' => 'default'
    );
 
$payload = json_encode($body);

 for($i = 0; $i < $countArray; $i++)
{
    $deviceToken = $result[$i]['appleID'];
   
    $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
 
    $result1 = fwrite($fp, $msg, strlen($msg));
     
    if (!$result1){
        echo  $deviceToken . 'Message not delivered' . PHP_EOL;
    }
    else
    {
     echo  $deviceToken . 'Message successfully delivered' . PHP_EOL;
    }
  }
    fclose($fp);   

?>

服务端下载地址代码down.html


        

down.html指向plist的地址,plist指向ipa的地址。
plist需要放在支持https的服务器上,down.html、ipa可以放在http/https上

参考:

http://blog.csdn.net/IOS_CaoMuJieBing/article/details/18043557
http://blog.csdn.net/showhilllee/article/details/8631734

你可能感兴趣的:(IOS企业版版本更新以及推送pem的生成)