├── .gitignore ├── demo ├── android_demo │ ├── ic_launcher-web.png │ ├── res │ │ ├── values │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ ├── drawable-hdpi │ │ │ └── ic_launcher.png │ │ ├── drawable-mdpi │ │ │ └── ic_launcher.png │ │ ├── drawable-xhdpi │ │ │ └── ic_launcher.png │ │ ├── drawable-xxhdpi │ │ │ └── ic_launcher.png │ │ └── layout │ │ │ └── main.xml │ ├── libs │ │ ├── android-support-v4.jar │ │ └── Cobub_Toaster_v1.0_release.jar │ ├── src │ │ └── com │ │ │ └── example │ │ │ └── pushimpdemo │ │ │ ├── DemoReceiver.java │ │ │ ├── controller │ │ │ ├── ToastHandler.java │ │ │ ├── NotificationHandler.java │ │ │ └── SMSHandler.java │ │ │ └── MainActivity.java │ ├── project.properties │ ├── proguard-project.txt │ └── AndroidManifest.xml └── php_web_demo │ └── apitest.php ├── android_sdk ├── cobub_toaster_1.0_release.jar └── src │ ├── .classpath │ ├── com │ └── cobub │ │ └── toaster │ │ └── push │ │ ├── component │ │ ├── PacketHandlerFactory.java │ │ ├── PushDataHandlerFactory.java │ │ ├── SrvBusyException.java │ │ ├── PacketParseErrorException.java │ │ ├── CertainPushTypeHandler.java │ │ ├── PackHandlerItem.java │ │ ├── SimplePacketHandler.java │ │ ├── PushDataHandlerItem.java │ │ ├── SyncHandler.java │ │ ├── BaseIOAdapter.java │ │ ├── PacketHandler.java │ │ ├── PushDataHandler.java │ │ ├── AppInsCmdHandler.java │ │ ├── TransparentMsgHandler.java │ │ ├── CPushReceiver.java │ │ ├── UnsubCmdHandler.java │ │ ├── SubCmdHandler.java │ │ ├── UConnection.java │ │ ├── PushMsgHandler.java │ │ ├── BrowserAct.java │ │ ├── RedisIOAdapter.java │ │ ├── DownloadService.java │ │ ├── NotificationHandler.java │ │ └── PushService.java │ │ ├── cont │ │ └── CommConst.java │ │ ├── model │ │ ├── ErrorRespPacket.java │ │ ├── NetPacket.java │ │ └── ApkDownloadModel.java │ │ ├── util │ │ ├── LogHelper.java │ │ ├── AsynFileDownloader.java │ │ └── BaseUtility.java │ │ └── api │ │ └── CPushInterface.java │ └── .project └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | Thumbs.db 3 | bin/ 4 | obj/ 5 | gen/ 6 | *.class 7 | -------------------------------------------------------------------------------- /demo/android_demo/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobub/toaster/HEAD/demo/android_demo/ic_launcher-web.png -------------------------------------------------------------------------------- /android_sdk/cobub_toaster_1.0_release.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobub/toaster/HEAD/android_sdk/cobub_toaster_1.0_release.jar -------------------------------------------------------------------------------- /demo/android_demo/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | PushImpDemo 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/android_demo/libs/android-support-v4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobub/toaster/HEAD/demo/android_demo/libs/android-support-v4.jar -------------------------------------------------------------------------------- /demo/android_demo/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobub/toaster/HEAD/demo/android_demo/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /demo/android_demo/res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobub/toaster/HEAD/demo/android_demo/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /demo/android_demo/res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobub/toaster/HEAD/demo/android_demo/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /demo/android_demo/libs/Cobub_Toaster_v1.0_release.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobub/toaster/HEAD/demo/android_demo/libs/Cobub_Toaster_v1.0_release.jar -------------------------------------------------------------------------------- /demo/android_demo/res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobub/toaster/HEAD/demo/android_demo/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /demo/android_demo/src/com/example/pushimpdemo/DemoReceiver.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobub/toaster/HEAD/demo/android_demo/src/com/example/pushimpdemo/DemoReceiver.java -------------------------------------------------------------------------------- /android_sdk/src/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /android_sdk/src/com/cobub/toaster/push/component/PacketHandlerFactory.java: -------------------------------------------------------------------------------- 1 | package com.cobub.toaster.push.component; 2 | 3 | public class PacketHandlerFactory { 4 | public static PacketHandler getSimpleHanler(){ 5 | return new SimplePacketHandler(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /android_sdk/src/com/cobub/toaster/push/component/PushDataHandlerFactory.java: -------------------------------------------------------------------------------- 1 | package com.cobub.toaster.push.component; 2 | 3 | public class PushDataHandlerFactory { 4 | public static PushDataHandler getPushTypeHandler(){ 5 | return new CertainPushTypeHandler(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /android_sdk/src/com/cobub/toaster/push/component/SrvBusyException.java: -------------------------------------------------------------------------------- 1 | package com.cobub.toaster.push.component; 2 | 3 | public class SrvBusyException extends Exception { 4 | /** 5 | * 6 | */ 7 | private static final long serialVersionUID = 1L; 8 | 9 | public SrvBusyException(String message) { 10 | // TODO Auto-generated constructor stub 11 | super(message); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /android_sdk/src/com/cobub/toaster/push/component/PacketParseErrorException.java: -------------------------------------------------------------------------------- 1 | package com.cobub.toaster.push.component; 2 | 3 | import java.io.IOException; 4 | 5 | public class PacketParseErrorException extends IOException { 6 | public PacketParseErrorException(String message) { 7 | // TODO Auto-generated constructor stub 8 | super(message); 9 | } 10 | /** 11 | * 12 | */ 13 | private static final long serialVersionUID = 1L; 14 | } 15 | -------------------------------------------------------------------------------- /android_sdk/src/com/cobub/toaster/push/component/CertainPushTypeHandler.java: -------------------------------------------------------------------------------- 1 | package com.cobub.toaster.push.component; 2 | 3 | public class CertainPushTypeHandler extends PushDataHandler { 4 | public CertainPushTypeHandler() { 5 | // TODO Auto-generated constructor stub 6 | super(); 7 | //add type here 8 | mHandlers.put("notification", new NotificationHandler()); 9 | mHandlers.put("transparent", new TransparentMsgHandler()); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /android_sdk/src/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | push_sdk 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /android_sdk/src/com/cobub/toaster/push/component/PackHandlerItem.java: -------------------------------------------------------------------------------- 1 | package com.cobub.toaster.push.component; 2 | 3 | import android.content.Context; 4 | 5 | import com.cobub.toaster.push.model.NetPacket; 6 | 7 | public abstract class PackHandlerItem { 8 | public PackHandlerItem() { 9 | // TODO Auto-generated constructor stub 10 | } 11 | public abstract boolean check(String type); 12 | public abstract NetPacket handle(Context context, NetPacket packet); 13 | } 14 | -------------------------------------------------------------------------------- /android_sdk/src/com/cobub/toaster/push/component/SimplePacketHandler.java: -------------------------------------------------------------------------------- 1 | package com.cobub.toaster.push.component; 2 | 3 | public class SimplePacketHandler extends PacketHandler { 4 | public SimplePacketHandler() { 5 | // TODO Auto-generated constructor stub 6 | super(); 7 | //add packet handler here 8 | mHandlers.put("hbReply", new SyncHandler()); 9 | mHandlers.put("pubmsg", new PushMsgHandler()); 10 | mHandlers.put("subReply", new SubCmdHandler()); 11 | mHandlers.put("unsubReply", new UnsubCmdHandler()); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /android_sdk/src/com/cobub/toaster/push/component/PushDataHandlerItem.java: -------------------------------------------------------------------------------- 1 | package com.cobub.toaster.push.component; 2 | 3 | import org.json.JSONObject; 4 | 5 | import android.content.Context; 6 | 7 | import com.cobub.toaster.push.model.NetPacket; 8 | 9 | public abstract class PushDataHandlerItem { 10 | public PushDataHandlerItem() { 11 | // TODO Auto-generated constructor stub 12 | } 13 | public abstract boolean check(String type); 14 | public abstract NetPacket handle(Context context, JSONObject json, NetPacket rawPacket); 15 | } 16 | -------------------------------------------------------------------------------- /demo/android_demo/src/com/example/pushimpdemo/controller/ToastHandler.java: -------------------------------------------------------------------------------- 1 | package com.example.pushimpdemo.controller; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.widget.Toast; 6 | 7 | public class ToastHandler { 8 | public static void handle(Context context, Intent intent){ 9 | String msg = intent.getStringExtra("data"); 10 | String expired = intent.getStringExtra("expired"); 11 | String mid = intent.getStringExtra("mid"); 12 | Toast.makeText(context, msg, Toast.LENGTH_LONG).show(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /android_sdk/src/com/cobub/toaster/push/component/SyncHandler.java: -------------------------------------------------------------------------------- 1 | package com.cobub.toaster.push.component; 2 | 3 | import android.content.Context; 4 | 5 | import com.cobub.toaster.push.model.NetPacket; 6 | 7 | public class SyncHandler extends PackHandlerItem { 8 | private String cmd_type = "hbReply"; 9 | 10 | @Override 11 | public boolean check(String type) { 12 | // TODO Auto-generated method stub 13 | return cmd_type.equals(type); 14 | } 15 | 16 | @Override 17 | public NetPacket handle(Context context, NetPacket packet) { 18 | // TODO Auto-generated method stub 19 | return packet; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /android_sdk/src/com/cobub/toaster/push/cont/CommConst.java: -------------------------------------------------------------------------------- 1 | package com.cobub.toaster.push.cont; 2 | 3 | public class CommConst { 4 | public static final String VERSIONCODE = "0.1.0"; 5 | public static final String ACTION4LAUNCHCMD = "com.cobub.toaster.push.LCHCMD"; 6 | // public static final int TESTHOSTPORT = 9088; 7 | public static final String SPNAME = "cfg"; 8 | public static final String SYNCACTION = "com.cobub.toaster.push.SYNC"; 9 | // public static final String NORMAL = "com.customer.push.NORMAL"; 10 | public static final String SYNCGAP = "150"; 11 | public static final int NETWAITGAP = 60 * 60 * 1000; 12 | } 13 | -------------------------------------------------------------------------------- /demo/android_demo/project.properties: -------------------------------------------------------------------------------- 1 | # This file is automatically generated by Android Tools. 2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED! 3 | # 4 | # This file must be checked in Version Control Systems. 5 | # 6 | # To customize properties used by the Ant build system edit 7 | # "ant.properties", and override values to adapt the script to your 8 | # project structure. 9 | # 10 | # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): 11 | #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt 12 | 13 | # Project target. 14 | target=android-10 15 | -------------------------------------------------------------------------------- /android_sdk/src/com/cobub/toaster/push/component/BaseIOAdapter.java: -------------------------------------------------------------------------------- 1 | package com.cobub.toaster.push.component; 2 | 3 | import java.io.IOException; 4 | 5 | import com.cobub.toaster.push.component.UConnection; 6 | 7 | public abstract class BaseIOAdapter { 8 | public UConnection mConnection; 9 | public BaseIOAdapter(UConnection connection) { 10 | // TODO Auto-generated constructor stub 11 | mConnection = connection; 12 | } 13 | 14 | public abstract Object recPack() throws IOException; 15 | 16 | public abstract void sendPack(Object data) throws IOException; 17 | 18 | public UConnection getConnection() { 19 | return mConnection; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /demo/android_demo/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 14 | 15 | 16 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /android_sdk/src/com/cobub/toaster/push/model/ErrorRespPacket.java: -------------------------------------------------------------------------------- 1 | package com.cobub.toaster.push.model; 2 | 3 | import java.util.Map; 4 | 5 | public class ErrorRespPacket extends NetPacket { 6 | 7 | public ErrorRespPacket(Map packElements, boolean isError) { 8 | super(packElements, isError); 9 | // TODO Auto-generated constructor stub 10 | } 11 | 12 | public String getErrorCode(){ 13 | return getValueByKey("errorCode", "410"); 14 | } 15 | 16 | public String getErrorDesc(){ 17 | return getValueByKey("errorDesc", "no desc found by unknown error"); 18 | } 19 | 20 | @Override 21 | public String toString(){ 22 | StringBuffer strBuff = new StringBuffer("-"); 23 | strBuff.append(getErrorCode() + " "); 24 | strBuff.append(getErrorDesc() + "\r\n"); 25 | return strBuff.toString(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /demo/android_demo/proguard-project.txt: -------------------------------------------------------------------------------- 1 | # To enable ProGuard in your project, edit project.properties 2 | # to define the proguard.config property as described in that file. 3 | # 4 | # Add project specific ProGuard rules here. 5 | # By default, the flags in this file are appended to flags specified 6 | # in ${sdk.dir}/tools/proguard/proguard-android.txt 7 | # You can edit the include path and order by changing the ProGuard 8 | # include property in project.properties. 9 | # 10 | # For more details, see 11 | # http://developer.android.com/guide/developing/tools/proguard.html 12 | 13 | # Add any project specific keep options here: 14 | 15 | # If your project uses WebView with JS, uncomment the following 16 | # and specify the fully qualified class name to the JavaScript interface 17 | # class: 18 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 19 | # public *; 20 | #} 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Cobub Toaster is an Open Source Mobile App Push Notification Solution which can be deployed isolated, other than the public cloud like GCM (Google Cloud Message). 2 | 3 | Cobub Toaster includes two components, Push Notification Server and SDK. 4 | 5 | Push Notification Server will be deployed inside the enterprise own server; SDK needs to be integrated into mobile APPs. The SDK will maintain a persistent connection with the PNS via TCP, and the developer is able to push custom messages to the APP from server side. 6 | 7 | And our SDK is open source, in that you won’t worry about sensitive information leak or privacy issue. 8 | 9 | Cobub Toaster is suitable for the enterprise-level scenarios. 10 | 11 | For more information please visit the Cobub Toaster Documents: 12 | 13 | English: http://dev.cobub.com/docs/cobub-toaster 14 | 15 | Chinese: http://dev.cobub.com/zh/docs/cobub-toaster 16 | -------------------------------------------------------------------------------- /demo/android_demo/res/layout/main.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 12 | 13 | 18 |