android sdk socket,GitHub - weixiang1999/socket.io-push-android: android sdk for socket.io-push

socket.io-push-android 68747470733a2f2f7472617669732d63692e6f72672f787564756f2f736f636b65742e696f2d707573682d616e64726f69642e7376673f6272616e63683d6d6173746572

demo实现了一个聊天室功能, 编译clone后 需要pull submodule

git clone https://github.com/xuduo/socket.io-push-android

git submodule update --recursive --remote

小米,华为,友盟均为可选接入。开启条件为 对应厂商系统&classpath里有对应sdk&androidManifest里有配置

小米推送(所有MUI) MiPush_SDK_Client_XXX.jar

华为推送(EMUI5.0以上) HMSSdkBase_XXX.jar HMSSdkPush_XXX.jar

友盟推送(非小米华为) com.umeng.message_XXX.jar alicloud-android-sdk-httpdns-XXX.jar utdid4all-XXX_proguard.jar libcocklogic-XXX.so libtnet-XXX.so

添加maven/gradle依赖

68747470733a2f2f6d6176656e2d6261646765732e6865726f6b756170702e636f6d2f6d6176656e2d63656e7472616c2f636f6d2e79792f616e64726f69642d707573682d73646b2f62616467652e737667

maven

com.yy

android-push-sdk

${version}

gradle

compile 'com.yy:android-push-sdk:${versoion}'

AndroidManifest.xml添加receiver,service,permission

Proguard

混淆配置

-dontwarn com.yy.httpproxy.thirdparty.**

-dontwarn okio.**

##如接入华为push

-keep class com.huawei.android.pushagent.** {*;}

-keep class com.huawei.android.pushselfshow.** {*;}

-keep class com.huawei.android.microkernel.** {*;}

-keep class com.baidu.mapapi.** {*;}

-dontwarn com.huawei.**

##如接入华为push

初始化ProxyClient

每次UI进程启动需要初始化,初始化后会自动启动push进程.

Proxy proxyClient = new ProxyClient(new Config(this)

.setHost("http://spush.yy.com") //连接的服务器地址

.setConnectCallback(this) //socket.io通道,连上,断开回调

.setPushCallback(this) //push回调,socket.io长连接通道

.setLogger(MyLogger.class)); //日志回调,可选,这个类会实例化在push进程

注意不要通过其他进程启动,可以用以下代码判断是否ui进程

private boolean isUiProcess() {

ActivityManager am = ((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE));

List processInfos = am.getRunningAppProcesses();

String mainProcessName = getPackageName();

int myPid = Process.myPid();

for (RunningAppProcessInfo info : processInfos) {

if (info.pid == myPid && mainProcessName.equals(info.processName)) {

return true;

}

}

return false;

}

获取pushId

由客户端自动生成, proxyClient实例化后即可获得

用于服务器对单个设备发push/notification

String pushId = proxyClient.getPushId();

subscribe/unsbuscribe topic

调用不需考虑当时是否连线, 重连也不需要重新sub/unsub,sdk里已经处理

proxyClient.subscribeBroadcast("aTopic"); //对于某个topic的push,需要客户端主动订阅,才能收到.如demo中,需订阅"chatRoom" topic,才能收到聊天消息

proxyClient.subscribeAndReceiveTtlPackets("aTopic"); //同上,这个方法会接收服务器的重传

proxyClient.unsubscribeBroadcast("aTopic");

接收push

public interface PushCallback {

/**

*

* @param data 服务器push下来的字符串

*/

void onPush(String data);

}

接收notification(使用DefaultNotificationHandler/DelegateToClientNotificationHandler)

sdk默认会弹出系统通知

arrive和click后会调用receiver的方法

public class YYNotificationReceiver extends NotificationReceiver {

@Override

public void onNotificationClicked(Context context, PushedNotification notification) {

Log.d("YYNotificationReceiver", "onNotificationClicked " + notification.id + " values " + notification.values);

Toast.makeText(context, "YYNotificationReceiver clicked payload: " + notification.values.get("payload"), Toast.LENGTH_SHORT).show();

Intent intent = new Intent(context, DrawActivity.class);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(intent);

}

/**

* 如果使用DelegateToClientNotificationHandler ,UI进程存活的时候,会调用此方法,不弹出通知.

* UI进程被杀,push进程存活的时候,使用默认的样式弹出

*  使用小米华为推送时,不会调用

*/

@Override

public void onNotificationArrived(Context context, PushedNotification notification) {

Log.d("YYNotificationReceiver", "onNotificationArrived " + notification.id + " values " + notification.values);

}

}

启动时的配置,配置使用

config.setNotificationHandler(MyHandlerClass.class); //不能混淆这个类

自定义弹出通知(使用自定义NotificationHandler)

可以用代码根据业务服务器下发的notification中的自定义payload字段,展示不同的效果

注意!NotificationHandler的实例,是在push进程中的!

实现接口

public interface NotificationHandler {

/**

*

* @param context context

* @param binded UI进程 是否存活

* @param notification 业务服务器下发的notification

*/

void handlerNotification(Context context, boolean binded, PushedNotification notification);

}

启动时的配置,设置NotificationHandler

config.setNotificationHandler("yourFullyQualifiedHandlerClassName"); //不能混淆这个类

绑定UID

绑定UID是业务服务器调用push-server接口进行绑定的(pushId - uid)的关系

由于安全性的问题,客户端无法直接绑定

push-server和业务服务器的绑定关系可能会不一致

每次连接到push-sever后, 客户端要根据回调, 判断回调的uid与当前用户uid是否一致, 进行绑定/解绑

public interface ConnectCallback {

/**

*

* @param uid 连接push-server后,在服务器绑定的uid,如未绑定,uid = ""

* @param uid 连接push-server后,在服务器绑定的tags

*/

void onConnect(String uid, Set tags);

void onDisconnect();

}

解绑Uid,客户端直接调用接口解绑

proxyClient.unbindUid();

添加删除tag

proxyClient.addTag("tag1");

proxyClient.removeTag("tag2");

tag回调同上

集成小米push

本系统透明集成了小米push,开启方法.

添加小米push jar依赖

AndroidManifest.xml配置了小米push相关配置,参见demo

当前手机运行MiUi系统

注意项

SDK会自动上报小米的regId,并不需要业务代码改动

对于开启的手机,无法使用自定义NotificationHandler控制notification弹出

可以通过push-server配置,应用在前台的时候,不弹出通知(小米push功能)

集成华为push

本系统透明集成了华为push,开启方法

添加华为push jar依赖,拷贝一堆资源文件(华为push自带)

AndroidManifest.xml配置了华为push相关配置,参见demo

当前手机运行华为系统

注意项

SDK会自动上报华为的token,并不需要业务代码改动

对于开启的手机,无法使用自定义NotificationHandler控制notification弹出

UI进程单独使用push功能

String pushId = new RandomPushIdGenerator().generatePushId(pushId); //生成随机pushId

SocketIOProxyClient client = new SocketIOProxyClient(this.getApplicationContext(), host, null);

client.setPushId(pushId); //设置pushId

client.setPushCallback(this); // push回调

client.setNotificationCallback(this); //notification回调

client.setConnectCallback(this); //连接回调

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值