Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Try this - </p> <pre><code>Client side code - // Main Class- class App extends UiApplication { private static App theApp; public App() { pushScreen(new register()); } public static void main(String[] args) { if (args.length &gt; 0 &amp;&amp; args[0].equals("BB_push") ){ theApp = new App(); theApp.enterEventDispatcher(); } else { BackgroundApplication backApp=new BackgroundApplication(); backApp.setupBackgroundApplication(); backApp.enterEventDispatcher(); } } } //Register Class- public class register extends MainScreen{ public register(){ final ButtonField btn=new ButtonField("Register"); add(btn); FieldChangeListener listener=new FieldChangeListener() { public void fieldChanged(Field field, int context) { if(field==btn){ registerBpas(); } }}; btn.setChangeListener(listener); } } public static void registerBpas() { new Thread() { public void run() { try { final String registerUrl = formRegisterRequest(BPAS_URL, APP_ID, null) + ";deviceside=false;ConnectionType=mds-public"; 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); httpConnection.close(); String nextUrl = formRegisterRequest(BPAS_URL, APP_ID, response) + ";deviceside=false;ConnectionType=mds-public"; 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); nextHttpConnection.close(); if (REGISTER_SUCCESSFUL.equals(response) || USER_ALREADY_SUBSCRIBED.equals(response)) { Dialog.alert("msg Registered successfully for BIS push"); System.out.println("msg Registered successfully for BIS push"); } else { Dialog.alert("msg BPAS rejected registration"); System.out.println("msg BPAS rejected registration"); } } catch (final IOException e) { Dialog.alert("msg IOException on register() " + e + " " + e.getMessage()); System.out.println("msg IOException on register() " + e + " " + e.getMessage()); } } }.start(); } 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("&amp;osversion=").append(DeviceInfo.getSoftwareVersion()); sb.append("&amp;model=").append(DeviceInfo.getDeviceName()); if (token != null &amp;&amp; token.length() &gt; 0) { sb.append("&amp;").append(token); } return sb.toString(); } } 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) { } } } //Background listener class class BackgroundApplication extends Application { public BackgroundApplication() { // TODO Auto-generated constructor stub } public void setupBackgroundApplication(){ MessageReadingThread messageReadingThread = new MessageReadingThread(); messageReadingThread.start(); } private static class MessageReadingThread extends Thread { private boolean running; private ServerSocketConnection socket; private HttpServerConnection conn; private InputStream inputStream; private PushInputStream pushInputStream; public MessageReadingThread() { this.running = true; } public void run() { String url = "http://:" + Port; url += ";deviceside=false;ConnectionType=mds-public"; if ((WLANInfo.getWLANState() == WLANInfo.WLAN_STATE_CONNECTED) &amp;&amp; RadioInfo.areWAFsSupported(RadioInfo.WAF_WLAN)) { url += ";interface=wifi"; } try { socket = (ServerSocketConnection) Connector.open( url ); } catch( IOException ex ) { // can't open the port, probably taken by another application onListenError( ex ); } while( running ) { try { Object o = socket.acceptAndOpen(); conn = (HttpServerConnection) o; inputStream = conn.openInputStream(); pushInputStream = new MDSPushInputStream( conn, inputStream ); PushMessageReader.process( pushInputStream, conn ); } catch( Exception e ) { if( running ) { // Logger.warn( "Failed to read push message, caused by " + e.getMessage() ); running = false; } } finally { // PushUtils.close( conn, pushInputStream, null ); } } // Logger.log( "Stopped listening for push messages" ); } public void stopRunning() { running = false; //PushUtils.close( socket, null, null ); } private void onListenError( final Exception ex ) { // Logger.warn( "Failed to open port, caused by " + ex ); System.out.println(ex); } } } //push message reader class - // HTTP header property that carries unique push message ID private static final String MESSAGE_ID_HEADER = "Push-Message-ID"; // content type constant for text messages private static final String MESSAGE_TYPE_TEXT = "text"; private static final int MESSAGE_ID_HISTORY_LENGTH = 10; private static String[] messageIdHistory = new String[MESSAGE_ID_HISTORY_LENGTH]; private static byte historyIndex; private static byte[] buffer = new byte[15 * 1024]; public static void process(PushInputStream pis, Connection conn) { System.out.println("Reading incoming push message ..."); try { HttpServerConnection httpConn; if (conn instanceof HttpServerConnection) { httpConn = (HttpServerConnection) conn; } else { throw new IllegalArgumentException("Can not process non-http pushes, expected HttpServerConnection but have " + conn.getClass().getName()); } String msgId = httpConn.getHeaderField(MESSAGE_ID_HEADER); String msgType = httpConn.getType(); String encoding = httpConn.getEncoding(); System.out.println("Message props: ID=" + msgId + ", Type=" + msgType + ", Encoding=" + encoding); boolean accept = true; if (!alreadyReceived(msgId)) { byte[] binaryData; if (msgId == null) { msgId = String.valueOf(System.currentTimeMillis()); } if (msgType == null) { System.out.println("Message content type is NULL"); accept = false; } else if (msgType.indexOf(MESSAGE_TYPE_TEXT) &gt;= 0) { // a string int size = pis.read(buffer); binaryData = new byte[size]; System.arraycopy(buffer, 0, binaryData, 0, size); PushMessage message = new PushMessage(msgId, System.currentTimeMillis(), binaryData, true, true ); String text = new String( message.getData(), "UTF-8" ); try{ final Dialog screen = new Dialog(Dialog.D_OK_CANCEL, " "+text, Dialog.OK, //mImageGreen.getBitmap(), null, Manager.VERTICAL_SCROLL); final UiEngine ui = Ui.getUiEngine(); Application.getApplication().invokeAndWait(new Runnable() { public void run() { NotificationsManager.triggerImmediateEvent(0x749cb23a76c66e2dL, 0, null, null); ui.pushGlobalScreen(screen, 0, UiEngine.GLOBAL_QUEUE); } }); screen.setDialogClosedListener(new MyDialogClosedListener()); } catch (Exception e) { // TODO: handle exception } // TODO report message } else { System.out.println("Unknown message type " + msgType); accept = false; } } else { System.out.println("Received duplicate message with ID " + msgId); } pis.accept(); } catch (Exception e) { System.out.println("Failed to process push message: " + e); } } private static boolean alreadyReceived(String id) { if (id == null) { return false; } if (Arrays.contains(messageIdHistory, id)) { return true; } // new ID, append to the history (oldest element will be eliminated) messageIdHistory[historyIndex++] = id; if (historyIndex &gt;= MESSAGE_ID_HISTORY_LENGTH) { historyIndex = 0; } return false; } public class PushMessage{ private String id; private long timestamp; private byte[] data; private boolean textMesasge; private boolean unread; public PushMessage( String id, long timestamp, byte[] data, boolean textMesasge, boolean unread ) { super(); this.id = id; this.timestamp = timestamp; this.data = data; this.textMesasge = textMesasge; this.unread = unread; } public String getId() { return id; } public long getTimestamp() { return timestamp; } public byte[] getData() { return data; } public boolean isTextMesasge() { return textMesasge; } public boolean isUnread() { return unread; } public void setUnread( boolean unread ) { this.unread = unread; } } public class MyDialogClosedListener implements DialogClosedListener { public void dialogClosed(Dialog dialog, int choice) { if(dialog.equals(dialog)) { if(choice == -1) { //Your code for Press OK } if(choice == 1) { //Your code for Press Cancel } } } } Server sode PHP code is given Below - ini_set('display_errors','1'); error_reporting(E_ALL); // APP ID provided by RIM $appid = 'app id'; // Password provided by RIM $password = 'password'; //Deliver before timestamp $deliverbefore = gmdate('Y-m-d\TH:i:s\Z', strtotime('+time minutes')); //An array of address must be in PIN format or "push_all" $addresstosendto[] = 'your pin'; $addresses = ''; foreach ($addresstosendto as $value) { $addresses .= ' '; } // create a new cURL resource $err = false; $ch = curl_init(); $messageid = microtime(true); $data = '--mPsbVQo0a68eIL3OAxnm'. "\r\n" . 'Content-Type: application/xml; charset=UTF-8' . "\r\n\r\n" . ' ' . $addresses . ' ' . "\r\n" . '--mPsbVQo0a68eIL3OAxnm' . "\r\n" . 'Content-Type: text/plain' . "\r\n" . 'Push-Message-ID: ' . $messageid . "\r\n\r\n" . stripslashes('r') . "\r\n" . '--mPsbVQo0a68eIL3OAxnm--' . "\n\r"; // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, "https://pushapi.eval.blackberry.com/mss/PD_pushRequest");//"https://cp2991.pushapi.eval.blackberry.com/mss/PD_pushRequest" curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_USERAGENT, "Hallgren Networks BB Push Server/1.0"); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, $appid . ':' . $password); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: multipart/related; boundary=mPsbVQo0a68eIL3OAxnm; type=application/xml", "Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2", "Connection: keep-alive")); // grab URL and pass it to the browser echo $xmldata = curl_exec($ch); // close cURL resource, and free up system resources curl_close($ch); //Start parsing response into XML data that we can read and output $p = xml_parser_create(); xml_parse_into_struct($p, $xmldata, $vals); $errorcode = xml_get_error_code($p); if ($errorcode &gt; 0) { echo xml_error_string($errorcode); $err = true; } xml_parser_free($p); echo 'Our PUSH-ID: ' . $messageid . " \n"; if (!$err &amp;&amp; $vals[1]['tag'] == 'PUSH-RESPONSE') { echo 'PUSH-ID: ' . $vals[1]['attributes']['PUSH-ID'] . " \n"; echo 'REPLY-TIME: ' . $vals[1]['attributes']['REPLY-TIME'] . " \n"; echo 'Response CODE: ' . $vals[2]['attributes']['CODE'] . " \n"; echo 'Response DESC: ' . $vals[2]['attributes']['DESC'] . " \n"; } else { echo 'An error has occured ' . "\n"; echo 'Error CODE: ' . $vals[1]['attributes']['CODE'] . " \n"; echo 'Error DESC: ' . $vals[1]['attributes']['DESC'] . " \n"; } ?&gt; </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload