2013-07-01 6 views
6

मुझे Google क्लाउड मैसेजिंग (सुरक्षा कारणों) का उपयोग न करने, एंड्रॉइड अनुप्रयोगों के लिए पुश अधिसूचना प्रणाली विकसित करने की आवश्यकता है। यहां सर्वर उन सभी उपकरणों को सूचित करेगा जो वर्तमान में किसी विशेष एंड्रॉइड एप्लिकेशन पर लॉग ऑन हैं।Google क्लाउड मैसेजिंग का उपयोग किए बिना एंड्रॉइड के लिए पुश नोटिफिकेशन कैसे विकसित करें?

मुझे पता है कि सवाल बहुत व्यापक है, लेकिन क्या कोई मुझे संभावित समाधान बता सकता है।

अग्रिम धन्यवाद।

+0

यदि आपके पास – tyczj

+0

यह पूछ सकता है कि यह बैंकिंग एप्लिकेशन का एक हिस्सा है तो आपको किस तरह के सुरक्षा कारण हैं जो आपको दो बार सोचते हैं। और इसी कारण से मुझे बताया गया कि मैं जीसीएम का उपयोग नहीं कर सका। – Newbie

+0

http://stackoverflow.com/questions/15297246/are-there-any-alternative-to-gcm-google-cloud-messaging-for-custom-android-bui –

उत्तर

2

आप पुश अधिसूचना सेवा के निर्माण के लिए एमक्यूटीटी का उपयोग कर सकते हैं। (नोट: फेसबुक जैसे एप्लिकेशन पुश अधिसूचनाओं के लिए एमक्यूटीटी का उपयोग करते हैं)।

तो, एक पुश सूचना सेवा आप एक MQTT दलाल सर्वर पर चल रहा जरूरत का निर्माण करने के (मैं MQTT Mosquitto की सलाह देते हैं और एक Bachground सेवा Android डिवाइस पर चल रहा है।

कोड MQTT सेवा के लिए (दोनों सर्वर पर इस्तेमाल किया जा सकता और ग्राहक सोडे) पर:

/** 
* MQTTManager class provide methods to connect, subscribe, publish, and listen to MQTT broker 
*/ 
public class MQTTManager { 

private final String TAG = "MQTT"; 
private final String BROKER_URL = "http://mqtt-dashboard.com/info/broker:1883"; //change it to your broker URL 
private MqttClient mqttClient; 
private String CLIENT_ID = "123" 
private String topic = "ABC" 
private int keepAliveInterval=60*5; 
private MqttConnectOptions opt; 

/** 
* Constructor 
* @throws MqttException 
*/ 
protected MQTTManager() throws MqttException { 
    opt=new MqttConnectOptions(); 
    opt.setKeepAliveInterval(keepAliveInterval); 
    opt.setConnectionTimeout(10); 
    mqttClient = new MqttClient(BROKER_URL, CLIENT_ID, new MemoryPersistence()); 
    mqttClient.setCallback(new MQTTCallback(BROKER_URL, CLIENT_ID, topic)); 
} 

/** 
* Connects to the MQTT broker service on server side. 
*/ 
public void connect(){ 
    try { 
     mqttClient.connect(opt); 
    } catch (MqttException e) { 
     Log.e(TAG, "Error while connecting to mqtt broker: "+e.toString()); 
    } 
} 

/** 
* Subscribes the device to the topic provided via constructor 
*/ 
public void subscribeDevice(){ 
    try { 
     mqttClient.subscribe(this.topic); 
    } catch (MqttException e) { 
     Log.e(TAG, "Error while subscribing to mqtt broker: "+e.toString()); 
    } 
} 

/** 
* Publishes the message to the MQTT broker service. 
* @param String Message that needs to be published 
*/ 
public void publishToDevice(String message){ 
    try { 
     MqttTopic mtopic=mqttClient.getTopic(this.topic); 
     MqttMessage msg= new MqttMessage(message.getBytes()); 
     mtopic.publish(msg); 
    } catch (MqttException e) { 
     Log.e(TAG, "Error while publishing to mqtt broker: "+e.toString()); 
    } 
} 


/** 
* Inner class for mqtt callback 
*/ 
public class MQTTCallback implements MqttCallback{ 

    final private String TAG = "MQTT"; 
    private String BROKER_URL; 
    private String CLIENT_ID;     
    private String TOPIC; 
    private MqttClient mqttClient; 

    public MQTTCallback(String BROKER_URL, String CLIENT_ID, String TOPIC) { 
     this.BROKER_URL= BROKER_URL; 
     this.CLIENT_ID = CLIENT_ID; 
     this.TOPIC=TOPIC; 
    } 

    public void connectionLost(Throwable arg0) { 
     connect();   
    } 

    public void deliveryComplete(MqttDeliveryToken arg0) { 
     if(arg0==null) 
      System.out.print("Message delivered");   
    } 

    public void messageArrived(MqttTopic arg0, MqttMessage arg1) 
      throws Exception { 
     // MESSAGE ARRIVES HERE!! argo-> device id & arg1 --> message 
    } 
} 
} 

अधिक जानने के लिए आप MQTT पुश अधिसूचना सेवा इस परियोजना में लागू की जाँच कर सकते हैं:। SenSocial कि मैं कार्यान्वित

ऐसा न करने पर अपने सर्वर पर ब्रोकर चल रहा है, तो आप एक सार्वजनिक रूप से उपलब्ध एमक्यूटीटी मच्छर-आधारित ब्रोकर का प्रयास कर सकते हैं: MQTT BROKER

+0

अच्छा जवाब। साझा करने के लिए धन्यवाद। मैंने प्रकटीकरण के साथ संपादित किया। – Drew

0

मैं जीसीएम का उपयोग न करने की सिफारिश करता हूं। फोन से पुश सर्वर तक लगातार कनेक्शन बनाए रखना महंगा है (बैटरी उपयोग के मामले में भी वास्तविक धन) और जीसीएम आपके लिए मुफ्त में करता है। यह भी स्पष्ट नहीं है कि आप पृष्ठभूमि में लगातार सॉकेट श्रोता होने की योजना कैसे बनाते हैं। यह संभावना है कि स्मृति दबाव के कारण किसी बिंदु पर ढांचे द्वारा इसे मार दिया जाएगा। जीसीएम एक विशेषाधिकार प्राप्त प्रक्रिया में चलता है जो कि मारने के लिए कठिन तरीका है।

सुरक्षा के अनुसार मैं डिवाइस पर भेजने से पहले आपके पास जो भी पेलोड है, उसे एन्क्रिप्ट करने की सलाह दूंगा, फिर फोन में डिक्रिप्ट कर रहा हूं। विकास लागत और बैटरी उपयोग के मामले में यह सस्ता होगा।

+0

जीसीएम के बिजली उपयोग लाभ को बनाए रखते हुए आप किसी निजी नेटवर्क पर पुश सूचनाओं को कैसे लागू करेंगे (जैसे किसी बाहरी इंटरनेट कनेक्शन वाले बिजली संयंत्र में)? – Jeremy

संबंधित मुद्दे