2012-04-26 2 views
-1

J'ai besoin d'un exemple de code d'application pour l'intégration Push dans mon application Blackberry. J'ai enregistré ma demande pour les informations d'identification push et les ai reçues.Blackberry Push Integration Client Exemple de code

s'il vous plaît aider,

Cordialement, Rupesh

+0

se réfèrent http://stackoverflow.com/questions/7481122/push-notification-in-blackberry et http://stackoverflow.com/questions/8396978/push-notification-with- blackberry-client-server – Signare

Répondre

1

Cela fonctionne entièrement le code d'application Push, il est peut-être vous aider à mettre en œuvre notification push.

public class push_Main { 

/** 
* Entry point for this application 
* @param args Command line arguments (not used) 
*/ 

private static final String REGISTER_SUCCESSFUL = "rc=200"; 
private static final String DEREGISTER_SUCCESSFUL = REGISTER_SUCCESSFUL; 
private static final String USER_ALREADY_SUBSCRIBED = "rc=10003"; 
private static final String ALREADY_UNSUSCRIBED_BY_USER = "rc=10004"; 
private static final String ALREADY_UNSUSCRIBED_BY_PROVIDER = "rc=10005"; 

private static final String PUSH_PORT = ""; //push port 
private static final String BPAS_URL = "http://pushapi.eval.blackberry.com"; 
private static final String APP_ID = ""; // add application id 
// private static final String CONNECTION_SUFFIX = ";deviceside=false;ConnectionType=seekrit string"; 

private static String URL = "http://:100"; // PORT 100 add your posh port. 
private static final int CHUNK_SIZE = 256; 

public static ListeningThread _listeningThread; 
public static StreamConnectionNotifier _notify; 

private static final long ID = 0x954a603c0dee81e0L; 


public push_Main() { 
    // TODO Auto-generated constructor stub 

    NotificationsManager.registerSource(ID, theSource, NotificationsConstants.IMPORTANT); 
     if(_listeningThread==null) 
     { 
      System.out.println("msg on listening thread 1");   
      _listeningThread = new ListeningThread(); 
      System.out.println("msg on listening thread 2"); 
      _listeningThread.start(); 
      System.out.println("msg on listhning thread 3 "); 


     } 


} 
public static class ListeningThread extends Thread 
{ 
    private boolean _stop = false; 

    /** 
    * Stops the thread from listening. 
    */ 
    private synchronized void stop() 
    { 
     _stop = true; 
     try 
     { 
      // Close the connection so the thread will return. 
      _notify.close(); 
     } 
     catch (Exception e) 
     {  

     }   
    } 

    /** 
    * Listen for data from the HTTP url. After the data has been read, 
    * render the data onto the screen. 
    * @see java.lang.Runnable#run() 
    */ 

    public void run() 
    { 

     StreamConnection stream = null; 
     InputStream input = null; 
     MDSPushInputStream pushInputStream=null; 

     while (!_stop) 
     { 
      try 
      { 

       // Synchronize here so that we don't end up creating a connection that is never closed. 
       synchronized(this) 
       { 
        // Open the connection once (or re-open after an IOException), so we don't end up 
        // in a race condition, where a push is lost if it comes in before the connection 
        // is open again. We open the url with a parameter that indicates that we should 
        // always use MDS when attempting to connect. 
        System.out.println("\n\n msg connection 1"); 
        _notify = (StreamConnectionNotifier)Connector.open(URL); 
        System.out.println("\n\n msg connection 2"); 

       } 

       while (!_stop) 
       { 

        // NOTE: the following will block until data is received. 
        System.out.println("\n\n msg notify 1"); 
        stream = _notify.acceptAndOpen(); 
        System.out.println("\n\n msg 1 "); 

        try 
        { 
         System.out.println("\n\n msg 2"); 
         input = stream.openInputStream(); 
         System.out.println("\n\n msg 3 "); 

         pushInputStream= new MDSPushInputStream((HttpServerConnection)stream, input); 

         System.out.println("\n\n msg 4"); 
         // Extract the data from the input stream. 

         DataBuffer db = new DataBuffer(); 

         byte[] data = new byte[CHUNK_SIZE]; 
         int chunk = 0; 

         while (-1 != (chunk = input.read(data))) 
         { 
          db.write(data, 0, chunk); 
         } 

         updateMessage(data); 

         // This method is called to accept the push. 
         pushInputStream.accept();       

         data = db.getArray(); 
        } 
        catch (IOException e1) 
        { 
         // A problem occurred with the input stream , however, the original 
         // StreamConnectionNotifier is still valid. 
         //       errorDialog(e1.toString());     
        } 
        finally 
        { 
         if (input != null) 
         { 
          try 
          { 
           input.close(); 
          } 
          catch (IOException e2) 
          {     

          } 
         } 

         if (stream != null) 
         { 
          try 
          { 
           stream.close(); 
          } 
          catch (IOException e2) 
          {          
          } 
         }             
        } 
       }     
      } 
      catch (IOException ioe) 
      { 
       // Likely the stream was closed. Catches the exception thrown by 
       // _notify.acceptAndOpen() when this program exits. 
       errorDialog(ioe.toString());   
      } 
      finally 
      { 
       /* 

       if (_notify != null) 
       { 
        try 
        { 
         _notify.close(); 
         _notify = null; 
        } 
        catch (IOException e) 
        {   

        } 
       } 

       */ 

      } 
     } 
    } 
} 


private static void updateMessage(final byte[] data) 
{ 
    System.out.println("\n\n msg 6"); 

    Application.getApplication().invokeLater(new Runnable() 
    { 
     public void run() 
     { 
      // Query the user to load the received message. 

      //    Dialog.alert(new String(data)); 


      UiApplication.getUiApplication().invokeLater(new Runnable() { 
       public void run() 
       { 
        NotificationsManager.triggerImmediateEvent(ID, 0, null, null); 
        Dialog d = new Dialog(Dialog.D_OK, new String(data) ,0, null, Screen.DEFAULT_CLOSE); 
        //      _dialogShowing = true; 
        UiApplication.getUiApplication().pushGlobalScreen(d, 10, UiApplication.GLOBAL_MODAL); 

        // Dialog is closed at this point, so we cancel the event.           

       } 
      }); 


     } 

    }); 
} 

public static void registerBpas() { 

    /** 
    * As the connection suffix is fixed I just use a Thread to call the connection code 
    * 
    **/ 

    new Thread() { 
     public void run() { 
      try { 
       final String registerUrl = formRegisterRequest(BPAS_URL, APP_ID, null) + Conn.getConnectionParameters(); 
       System.out.println("\n\n\n msg registerBPAS URL is: "+ registerUrl); 
       HttpConnection httpConnection = (HttpConnection) Connector.open(registerUrl); 
       InputStream is = httpConnection.openInputStream(); 
       String response = new String(IOUtilities.streamToBytes(is)); 
       System.out.println("\n\n\n\n\n\n msg RESPOSE CODE : " + response); 
       close(httpConnection, is, null); 
       String nextUrl = formRegisterRequest(BPAS_URL, APP_ID, response) + Conn.getConnectionParameters(); 
       System.out.println("\n\n\n\n\n\n msg nextUrl : " + nextUrl); 
       HttpConnection nextHttpConnection = (HttpConnection) Connector.open(nextUrl); 
       InputStream nextInputStream = nextHttpConnection.openInputStream(); 
       response = new String(IOUtilities.streamToBytes(nextInputStream)); 
       System.out.println("\n\n\n\n\n\n msg RESPOSE CODE 1: " + response); 
       close(nextHttpConnection, is, null); 
       if (REGISTER_SUCCESSFUL.equals(response) || USER_ALREADY_SUBSCRIBED.equals(response)) { 
        System.out.println("msg Registered successfully for BIS push"); 
       } else { 
        System.out.println("msg BPAS rejected registration"); 
       } 
      } catch (final IOException e) { 

       System.out.println("msg IOException on register() " + e + " " + e.getMessage()); 
      } 
     } 
    }.start(); 
} 

public static void close(Connection conn, InputStream is, OutputStream os) { 
    if (os != null) { 
     try { 
      os.close(); 
     } catch (IOException e) { 
     } 
    } 
    if (is != null) { 
     try { 
      is.close(); 
     } catch (IOException e) { 
     } 
    } 
    if (conn != null) { 
     try { 
      conn.close(); 
     } catch (IOException e) { 
     } 
    } 
} 

public static void errorDialog(final String message) 
{ 
    UiApplication.getUiApplication().invokeLater(new Runnable() 
    { 
     public void run() 
     { 
      Dialog.alert(message); 
     } 
    }); 
} 

private static String formRegisterRequest(String bpasUrl, String appId, String token) { 
    StringBuffer sb = new StringBuffer(bpasUrl); 
    sb.append("/mss/PD_subReg?"); 
    sb.append("serviceid=").append(appId); 
    sb.append("&osversion=").append(DeviceInfo.getSoftwareVersion()); 
    sb.append("&model=").append(DeviceInfo.getDeviceName()); 
    if (token != null && token.length() > 0) { 
     sb.append("&").append(token); 
    } 
    return sb.toString(); 
} 

}

+0

Merci les gars! En passant, puis-je implémenter l'interface ** PushApplication ** pour recevoir push dans mon application? Je développe mon application pour les téléphones version 5.0 et 6.0. – user1330929

+0

Oui, vous recevez un massage par poussée dans votre application. il travaille sur 5.0 et 6.0 aussi. – Rajkiran

+0

quelle est la valeur de la source @ NotificationsManager.registerSource (ID, theSource, NotificationsConstants.IMPORTANT); –

Questions connexes