iOS 원 격 푸 시 원리 및 과정 실현

14654 단어 iOS원 거리푸 시
푸 시 알림 은 현재 의 응용 에 없어 서 는 안 될 기능 입 니 다.그렇다면 iOS 에서 우 리 는 어떻게 원 격 푸 시 를 실현 합 니까?iOS 의 원 격 푸 시 원 리 는 무엇 일 까요?iOS 원 격 푸 시 를 할 때 우 리 는 여러 가지 문제 에 부 딪 힐 수 있다.그럼 우선 푸 시 에 필요 한 물건 을 준비 해 보 겠 습 니 다.우 리 는 비용 을 지불 하 는 애플 개발 자 계 정(무료 로 원 격 푸 시 를 할 수 없습니다)이 필요 합 니 다.개발 자 계 정 이 있 으 면 우 리 는 애플 개발 자 사이트 에 가서 자신 이 필요 로 하 는 푸 시 관련 증 서 를 설정 할 수 있 습 니 다.그리고 인증 서 를 다운로드 하여 나중에 사용 할 수 있 도록 합 니 다.자세 한 인증서 설정 과정 은 다음 에 다시 이야기 하 겠 습 니 다.
우선 iOS 푸 시 알림 의 기본 원 리 를 말씀 드 리 겠 습 니 다.
애플 의 푸 시 서비스 알림 은 자신의 전문 푸 시 서버 APNs(Apple Push Notification service)로 이 루어 집 니 다.그 과정 은 APNs 가 자신의 애플 리 케 이 션 서버 에서 보 낸 푸 시 메 시 지 를 받 아 지정 한 iOS 장치 에 보 낸 다음 iOS 장치 에서 애플 리 케 이 션 에 알 립 니 다.우 리 는 통지 나 소리의 형식 으로 추 송 된 소식 을 받 을 것 이다.iOS 원 격 푸 시 전 제 는 애플 리 케 이 션 이 설 치 된 iOS 장치 가 APNs 서버 에 등록 해 야 한 다 는 것 입 니 다.등록 에 성공 하면 APNs 서버 는 devicetoken 을 되 돌려 줍 니 다.이 token 을 가 져 오 면 이 token 을 우리 에 게 보 냅 니 다.우리 가 메 시 지 를 전송 해 야 할 때,우리 의 응용 서버 는 메 시 지 를 지정 한 형식 으로 포장 한 다음,iOS 장치 의 devicetoken 과 결합 하여 APNs 서버 에 보 냅 니 다.Google 애플 리 케 이 션 은 APNs 서버 와 TCP 기반 의 긴 연결 을 유지 합 니 다.APNs 서버 는 새로운 메 시 지 를 iOS 장치 에 전송 한 다음 장치 화면 에 푸 시 메 시 지 를 표시 합 니 다.
장치 등록 APNs 의 흐름 도:
1.2222.png
위의 그림 은 다음 과 같은 절 차 를 완성 했다.
1.Device(장치)는 APNs 서버 에 연결 하고 장치 시리 얼 번호(UUID)를 휴대 합 니 다.
2.연결 에 성공 하면 APNs 는 패키지 와 처 리 를 통 해 devicetoken 을 만 들 고 등 록 된 Device(장치)에 되 돌려 줍 니 다.
3.Device(장치)가 가 져 온 devicetoken 을 가지 고 우리 자신의 응용 서버 에 보 냅 니 다.
4.추 송 될 Device(장치)가 APNs 서버 와 저희 애플 리 케 이 션 서버 에 등록 되 었 습 니 다.
푸 시 프로 세 스 맵:
1.333.png
푸 시 과정 은 다음 과 같은 절 차 를 거 칩 니 다.
1.우선,우리 의 장 치 는 푸 시 기능 을 가 진 응용 프로그램(응용 프로그램 은 코드 로 메 시 지 를 등록 하여 추진 해 야 합 니 다)을 설 치 했 습 니 다.우리 의 iOS 장 치 는 네트워크 가 있 는 상황 에서 APNs 푸 시 서버 에 연결 합 니 다.연결 과정 에서 APNS 서버 는 devicetoken 을 검증 하고 연결 이 성공 한 후에 TCP 기반 의 긴 연결 을 유지 합 니 다.
2.Provider(우리 자신의 응용 서버)는 푸 시 되 어야 할 메 시 지 를 받 고 푸 시 되 는 iOS 장치 의 devicetoken 과 결합 하여 APNS 서버 에 포장 하여 보 냅 니 다.
3.APNS 서버 는 지정 한 devicetoken 의 iOS 장치 에 정 보 를 전송 합 니 다.
4.iOS 장치 가 푸 시 메 시 지 를 받 은 후 프로그램 에 알 리 고 사용자 에 게 알려 줍 니 다(소리,팝 업 상자)
비교적 직관 적 인 흐름 도:
1.33.png
패키지 구성 도:
1.2323.png
위의 그림 에 표 시 된 이 메시지 체 는 애플 리 케 이 션 서버(Provider)가 APNs 서버 에 보 낸 메시지 구조 입 니 다.APNs 는 이 구조 가 정확 하 다 는 것 을 검증 하고 정 보 를 추출 한 후 지정 한 iOS 장치 로 메 시 지 를 보 냅 니 다.이 구조 체 는 다섯 부분 을 포함한다.첫 번 째 부분 은 명령 표시 자 이 고 두 번 째 부분 은 우리 의 devicetoken 길이 이 며 세 번 째 부분 은 우리 의 devicetoken 문자열 이다.네 번 째 부분 은 푸 시 메시지 체(Payload)의 길이 이 고 마지막 부분 은 바로 진정한 메시지 내용 이다.그 안에 푸 시 메시지 의 기본 정보,예 를 들 어 메시지 내용 등 이 포함 되 어 있다.Icon 오른쪽 상단 에 몇 개의 숫자 와 푸 시 메시지 가 도 착 했 을 때 재생 되 는 소리 등 을 표시 합 니 다.
Payload(메시지 체)의 구조:

{
 “aps”:{
 “alert”:“          ”,
 “badge”:1,
 “sound”:“default”
 },
}

이것 은 바로 JSON 구조 체 입 니 다.alert 라벨 의 내용 은 바로 사용자 의 핸드폰 에 표 시 된 푸 시 메 시 지 를 표시 하 는 것 입 니 다.badge 가 표시 하 는 수량(전체 형 주의)은 Icon 오른쪽 상단 에 표 시 된 수량 입 니 다.읽 지 않 은 메시지 가 몇 개 있 는 지 알려 주 는 등 sound 는 푸 시 메 시 지 를 핸드폰 에서 재생 하 는 소리 로 전달 하고 defalut 를 전달 하면 시스템 의 기본 소 리 를 표시 합 니 다.
다음은 우리 가 알림 에 필요 한 인증 서 를 푸 시 하 는 과정 입 니 다.
1.우선 Certificate Signing Request(즉 CSR)요청 파일 을 새로 만 듭 니 다.
응용 프로그램 에서 사용 하 는 도구 에서 열쇠 열 쇠 를 찾 아 접근 하고 인증서 발급 기관 에서 인증 서 를 요청 하 는 것 을 선택 하 십시오.
1.45.png
1.44.png
메모:메 일 주소,개발 자 계 정,상용 이름,아무 거나 적어 서 기억 하면 됩 니 다.그리고 디스크 에 저장 할 것 을 선택 하 십시오.계속 하면 돼.
1.55.png
저장 위 치 는 tingyun(자신의 폴 더 를 지정 합 니 다.여 기 는 제 폴 더 를 선택 합 니 다)에 있 습 니 다.저장 소 를 클릭 하 십시오.
그리고 완 료 를 클릭 하면 tingyun 에서 Certificate Signing Request.cert Signing Request 의 요청 파일,즉 우리 가 말 한 CSR 파일 을 볼 수 있 습 니 다.CSR 파일 을 만 드 는 동시에 열쇠 열 에 접근 하여 비밀 키 를 만 듭 니 다.이름 은 방금 우리 가 작성 한 상용 이름 입 니 다.
2.AppID 설정
애플 개발 자 사이트 방문https://developer.apple.com
계 정 클릭 
1.56.png
인증서,identifiers&Profiles 선택 
1.78.png
Identifiers->App IDs 를 선택 하고 위의+번 호 를 누 르 면 App ID 를 만 듭 니 다.
1.888.png
Name:App 이름 을 쓰 면 됩 니 다.
App ID Suffix 어댑터 없 는 및 Explicit App ID 선택
Bundle ID:자신 이 사용 하 는 Bundle ID 를 작성 하려 면 반드시 자신 이 사용 하 는 것 과 일치 해 야 합 니 다.
1.555.png
아래 App Services 에서 원 하 는 서 비 스 를 선택 하 십시오.
푸 시 서비스 가 필요 해서 Push Notifications 에 체크 를 했 습 니 다.
그리고 contine 을 누 르 세 요.
1.666.png
3.인증서 만 들 기
인증 서 는 두 가 지 를 만들어 야 합 니 다.하 나 는 개발 한 것 이 고 하 나 는 발표 한 것 이 며 개발 한 것 은 테스트 용 입 니 다.
Development 오른쪽 상단 의+번 호 를 누 르 고 인증 서 를 만 듭 니 다.먼저 개발 인증 서 를 만 듭 니 다.
1.99.png
Apple Push Notification service SSL(Sandbox)을 선택 하고 푸 시 서비스 인증 서 를 만 들 려 면 다음 단 계 를 누 르 십시오.
1.00.png
여기 App ID 는 저희 가 방금 만 든 App ID 를 선택 하 세 요.
그리고 다음 단 계 를 클릭 하고 다음 단 계 를 클릭 하 세 요.
0.09.png
여기에서 Choose File 을 누 르 고 우리 가 방금 만 든 CSR 파일 을 선택 하 십시오.
그리고 클릭 하여 생 성(Generate)
마지막 으로 다운 로드 를 클릭 하여 인증 서 를 다운로드 합 니 다.다운로드 한 인증 서 를 지정 한 위치 에 놓 습 니 다.
0.08.png  
인증서 생 성 은 개발 인증서 와 마찬가지 로 Production->Apple Push Notification service SSL(Production)을 선택 하면 개발 인증서 와 같 습 니 다.
0.07.png
0.9888.png
4.장치 추가:
먼저 어떤 장 치 를 추가 할 지 선택 한 다음 왼쪽 상단 에'+'번 호 를 누 르 십시오.
0.006.png  
Name 장치 이름 을 입력 하 십시오.
UDID 는 자신 이 테스트 에 가입 해 야 할 장 비 를 기입 한 UDID 입 니 다.
그리고 다음 단 계 를 누 르 세 요.
0.005.png
그리고 Register 를 누 르 시 면 됩 니 다.
0.001.png  
Done 을 클릭 합 니 다.
0.002.png  
000.png
5.장치 의 UDID 찾기:
자신의 iOS 장비 로 컴퓨터 에 연결 하여 iTunes 를 엽 니 다.
장치 요약 에서 시리 얼 번 호 를 볼 수 있 고 시리 얼 번 호 를 누 르 면 UDID 가 됩 니 다.
0091.png  
6.프로필 생 성
프로필 도 두 가지 가 있 습 니 다.하 나 는 개발 한 것 입 니 다.하 나 는 발표 한 것 입 니 다.개발 한 것 은 테스트 를 하 는 데 필요 한 것 입 니 다.발표 한 것 은 우리 가 Appstore 에서 발표 할 때 필요 한 것 입 니 다.우 리 는 모두 생 성 해 야 합 니 다.
우리 남편 은 프로필 을 개발 하고 provisioning Profiles->Development 을 선택 하여 오른쪽 상단 의+번 호 를 클릭 합 니 다.
0092.png  
iOS App Development 선택 다음 클릭
0093.png
여기 App ID 는 저희 가 방금 만 든 App ID 를 선택 하 세 요.
0094.png
0095.png  
여기 서 개발 자의 인증 서 를 선택 하 십시오.어느 것 이 모든 것 을 선택 하 는 지 모 르 면 됩 니 다.
0096.png  
여기 서 테스트 장 치 를 선택 하 십시오.없 으 면 앞의 Devices 에 추가 하면 됩 니 다.
0097.png  
0098.png
마음대로 이름 을 지 으 면 됩 니 다.그리고 다운로드 하 세 요.
1123.png  
프로필 을 발표 하 는 것 은 개발 프로필 과 같이 만 듭 니 다.Distribution->Ad Hoc 를 선택 하면 됩 니 다.다음은 프로필 을 발표 하 는 것 과 같 습 니 다.
1125.png  
1126.png  
11250.png
인증서 설정 이 완료 되 었 습 니 다.만 든 프로그램 을 엽 니 다.
AppDelegate.m 파일 을 열 고-(BOOL)application:(UIApplication*)application didFinishLaunching WithOptions:(NSDictionary*)launchOptions 방법 에 다음 코드 를 추가 하고 메 시 지 를 전송 합 니 다.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 // Override point for customization after application launch.
  /**        */
 if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {
  
  UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];
  [application registerUserNotificationSettings:settings];
  [application registerForRemoteNotifications];
 }else {
  [application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
 }
 
 return YES;
}
        ANPs               
/**                token */
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
 
 //         DeviceToken      !
 //  deviceToken      ,      
 NSString *token = [deviceToken description];
 NSLog(@"description %@", token);
}

              ,       
/**                      ,         */

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{

 NSLog(@"userInfo == %@",userInfo);
}

               ,      
/**          */
-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{
 NSLog(@"     %@",error);
}

서버 쪽(Java 서버)
서버 쪽 에 서 는'p12'라 는 접미사 와 필요 한 jar 패키지 가 필요 합 니 다.
서버 쪽 인증서 생 성 방식:
앞에서 다운로드 한 인증 서 를 열 고 열쇠 꾸러미 에서 찾 습 니 다.
0.98888.png  
마우스 우 클릭 으로 내 보 내기 선택
0.998.png  
접 두 사 를.p12 로 내 보 낸 파일 을 자신의 컴퓨터 에 저장 하려 면 비밀 번 호 를 입력 해 야 합 니 다.자바 서버 에서 사용 해 야 합 니 다.
0.9889.png  
자바 서버 에 필요 한 Jar 패키지
0.87.png
Java 서버 엔 드 코드:

import javapns.back.PushNotificationManager;
import javapns.back.SSLConnectionHelper;
import javapns.data.Device;
import javapns.data.PayLoad;
public class pushService {
 public static void main(String[] args) {
  
  
 try {
    String deviceToken = "eab6df47eb4f81e0aaa93bb208cffd7dc3884fd346ea0743fcf93288018cfcb6";
    //    iphone         
    PayLoad payLoad = new PayLoad();
    payLoad.addAlert("    push  ");
    payLoad.addBadge(1);
    payLoad.addSound("default");
      
    PushNotificationManager pushManager = PushNotificationManager.getInstance();
    pushManager.addDevice("iphone", deviceToken);
    
       //         :gateway.sandbox.push.apple.com /2195 
   //         :gateway.push.apple.com / 2195 
    String host="gateway.sandbox.push.apple.com"; //           
    int port = 2195;
    String certificatePath = "/Users/hsw/Desktop/PushTest/PushTest.p12"; //   mac        
    
    String certificatePassword= "123456";
   
    pushManager.initializeConnection(host, port, certificatePath,certificatePassword, SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);
      
    //Send Push
    Device client = pushManager.getDevice("iphone");
    pushManager.sendNotification(client, payLoad); //    
    pushManager.stopConnection();
    pushManager.removeDevice("iphone");
   }
   catch (Exception e) {
    e.printStackTrace();
    System.out.println("push faild!");
    return;
   }
   System.out.println("push succeed!");
   }

}
본 고 는 이미《iOS 푸 시 튜 토리 얼》으로 정리 되 었 으 니,여러분 의 읽 기 학습 을 환영 합 니 다.
이상 은 완전한 iOS 원 격 푸 시 원리 와 실현 과정 이 므 로 여러분 의 학습 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기