androidpn의 학습 연구 (3) androidpn-server 서버 몇 가지 설명

5470 단어 AndroidPn
AndroidPN(Android Push Notification)은 XMPP 프로토콜 기반Java 소스 전송 알림 구현으로 완전한 클라이언트와 서비스 포트를 포함한다.
AndroidPN은 Openfire 아래의 일부 소스 오픈 프로젝트를 기반으로 구축됩니다.
AndroidPN 서버는 두 부분으로 구성됩니다.
하나는 5222 포트에 있는 XMPP 서비스를 정탐하여 클라이언트의 XMPPConnection 클래스와 통신하는 것을 책임지고 사용자 등록과 신분 인증을 하고 알림 메시지를 전송하는 역할을 한다.
또 다른 부분은 웹 서버로 사용자의 웹 요청을 받는 경량급 HTTP 서버를 사용한다.
최상층에는 Session Manager, Auth Manager, Presence Manager, Notification Manager 등 네 개의 구성 부분이 포함되어 있다.
SessionManager는 클라이언트와 서버 간의 세션을 관리합니다.
Auth Manager는 클라이언트 사용자 인증 관리를 담당합니다.
Presence Manager는 클라이언트 사용자의 로그인 상태를 관리합니다.
NotificationManager는 서버가 클라이언트에 메시지를 푸시하는 기능을 수행합니다.
 
IQHandler 메시지 프로세서의 클래스:
IQHandler: 메시징 프로세서 추상 클래스.
IQAuthHandler: 권한 프로토콜의 메시지 처리 클래스, 메시지의 종류: jabber: iq: auth
IQRegisterHandler: 사용자가 등록한 메시지 처리 클래스, 메시지 유형: jabber:iq:register
IQRosterHandler: 사용자 메시지 상호 작용 클래스, 메시지 유형: jabber:iq:roster
PresenceUpdateHandler: 사용자 상태가 변경 처리 클래스를 보여줍니다.내부 호출, 유형이 없습니다.
NotificationManager 소스 코드:
public class NotificationManager {

    private static final String NOTIFICATION_NAMESPACE = "androidpn:iq:notification";

    private final Log log = LogFactory.getLog(getClass());

    private SessionManager sessionManager;

    /**
     * Constructor.
     */
    public NotificationManager() {
        sessionManager = SessionManager.getInstance();
    }

    /**
     * Broadcasts a newly created notification message to all connected users.
     * 
     * @param apiKey the API key
     * @param title the title
     * @param message the message details
     * @param uri the uri
     */
    public void sendBroadcast(String apiKey, String title, String message,
            String uri) {
        log.debug("sendBroadcast()...");
        IQ notificationIQ = createNotificationIQ(apiKey, title, message, uri);
        for (ClientSession session : sessionManager.getSessions()) {
            if (session.getPresence().isAvailable()) {
                notificationIQ.setTo(session.getAddress());
                session.deliver(notificationIQ);
            }
        }
    }

    /**
     * Sends a newly created notification message to the specific user.
     * 
     * @param apiKey the API key
     * @param title the title
     * @param message the message details
     * @param uri the uri
     */
    public void sendNotifcationToUser(String apiKey, String username,
            String title, String message, String uri) {
        log.debug("sendNotifcationToUser()...");
        IQ notificationIQ = createNotificationIQ(apiKey, title, message, uri);
        ClientSession session = sessionManager.getSession(username);
        if (session != null) {
            if (session.getPresence().isAvailable()) {
                notificationIQ.setTo(session.getAddress());
                session.deliver(notificationIQ);
            }
        }
    }

    /**
     * Creates a new notification IQ and returns it.
     */
    private IQ createNotificationIQ(String apiKey, String title,
            String message, String uri) {
        Random random = new Random();
        String id = Integer.toHexString(random.nextInt());
        // String id = String.valueOf(System.currentTimeMillis());

        Element notification = DocumentHelper.createElement(QName.get(
                "notification", NOTIFICATION_NAMESPACE));
        notification.addElement("id").setText(id);
        notification.addElement("apiKey").setText(apiKey);
        notification.addElement("title").setText(title);
        notification.addElement("message").setText(message);
        notification.addElement("uri").setText(uri);

        IQ iq = new IQ();
        iq.setType(IQ.Type.set);
        iq.setChildElement(notification);

        return iq;
    }
}

 
여기에서:
게시 가입 방식의 메시지 보내기 호출 방법:
   /**     * Broadcasts a newly created notification message to all connected users.     *      * @param apiKey the API key     * @param title the title     * @param message the message details     * @param uri the uri     */    public void sendBroadcast(String apiKey, String title, String message,            String uri);
 
 
 
P2P 전송 메시지 호출 방법:
   /**     * Sends a newly created notification message to the specific user.     *      * @param apiKey the API key     * @param title the title     * @param message the message details     * @param uri the uri     */    public void sendNotifcationToUser(String apiKey, String username,            String title, String message, String uri);
 
메시지를 보내는 방법을 만들려면 다음과 같이 하십시오.
   /**     * Creates a new notification IQ and returns it.     */    private IQ createNotificationIQ(String apiKey, String title,            String message, String uri);

좋은 웹페이지 즐겨찾기