| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- package eVVM.apk.jpush;
- import android.content.Context;
- import android.os.Handler;
- import android.os.Message;
- import android.util.SparseArray;
- import java.util.Locale;
- import java.util.Set;
- import cn.jpush.android.api.JPushInterface;
- import cn.jpush.android.api.JPushMessage;
- import cn.jpush.android.helper.Logger;
- /**
- * 处理tagalias相关的逻辑
- * */
- public class TagAliasOperatorHelper {
- private static final String TAG = "JIGUANG-TagAliasHelper";
- public static int sequence = 1;
- /**增加*/
- public static final int ACTION_ADD = 1;
- /**覆盖*/
- public static final int ACTION_SET = 2;
- /**删除部分*/
- public static final int ACTION_DELETE = 3;
- /**删除所有*/
- public static final int ACTION_CLEAN = 4;
- /**查询*/
- public static final int ACTION_GET = 5;
- public static final int ACTION_CHECK = 6;
- public static final int DELAY_SEND_ACTION = 1;
- public static final int DELAY_SET_MOBILE_NUMBER_ACTION = 2;
- private Context context;
- private static TagAliasOperatorHelper mInstance;
- private TagAliasOperatorHelper(){
- }
- public static TagAliasOperatorHelper getInstance(){
- if(mInstance == null){
- synchronized (TagAliasOperatorHelper.class){
- if(mInstance == null){
- mInstance = new TagAliasOperatorHelper();
- }
- }
- }
- return mInstance;
- }
- public void init(Context context){
- if(context != null) {
- this.context = context.getApplicationContext();
- }
- }
- private SparseArray<Object> setActionCache = new SparseArray<Object>();
- public Object get(int sequence){
- return setActionCache.get(sequence);
- }
- public Object remove(int sequence){
- return setActionCache.get(sequence);
- }
- public void put(int sequence,Object tagAliasBean){
- setActionCache.put(sequence,tagAliasBean);
- }
- private Handler delaySendHandler = new Handler(){
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what){
- case DELAY_SEND_ACTION:
- if(msg.obj !=null && msg.obj instanceof TagAliasBean){
- Logger.i(TAG,"on delay time");
- sequence++;
- TagAliasBean tagAliasBean = (TagAliasBean) msg.obj;
- setActionCache.put(sequence, tagAliasBean);
- if(context!=null) {
- handleAction(context, sequence, tagAliasBean);
- }else{
- Logger.e(TAG,"#unexcepted - context was null");
- }
- }else{
- Logger.w(TAG,"#unexcepted - msg obj was incorrect");
- }
- break;
- case DELAY_SET_MOBILE_NUMBER_ACTION:
- if(msg.obj !=null && msg.obj instanceof String) {
- Logger.i(TAG, "retry set mobile number");
- sequence++;
- String mobileNumber = (String) msg.obj;
- setActionCache.put(sequence, mobileNumber);
- if(context !=null) {
- handleAction(context, sequence, mobileNumber);
- }else {
- Logger.e(TAG, "#unexcepted - context was null");
- }
- }else{
- Logger.w(TAG,"#unexcepted - msg obj was incorrect");
- }
- break;
- }
- }
- };
- public void handleAction(Context context,int sequence,String mobileNumber){
- put(sequence,mobileNumber);
- Logger.d(TAG,"sequence:"+sequence+",mobileNumber:"+mobileNumber);
- JPushInterface.setMobileNumber(context,sequence,mobileNumber);
- }
- /**
- * 处理设置tag
- * */
- public void handleAction(Context context,int sequence, TagAliasBean tagAliasBean){
- init(context);
- if(tagAliasBean == null){
- Logger.w(TAG,"tagAliasBean was null");
- return;
- }
- put(sequence,tagAliasBean);
- if(tagAliasBean.isAliasAction){
- switch (tagAliasBean.action){
- case ACTION_GET:
- JPushInterface.getAlias(context,sequence);
- break;
- case ACTION_DELETE:
- JPushInterface.deleteAlias(context,sequence);
- break;
- case ACTION_SET:
- JPushInterface.setAlias(context,sequence,tagAliasBean.alias);
- break;
- default:
- Logger.w(TAG,"unsupport alias action type");
- return;
- }
- }else {
- switch (tagAliasBean.action) {
- case ACTION_ADD:
- JPushInterface.addTags(context, sequence, tagAliasBean.tags);
- break;
- case ACTION_SET:
- JPushInterface.setTags(context, sequence, tagAliasBean.tags);
- break;
- case ACTION_DELETE:
- JPushInterface.deleteTags(context, sequence, tagAliasBean.tags);
- break;
- case ACTION_CHECK:
- //一次只能check一个tag
- String tag = (String)tagAliasBean.tags.toArray()[0];
- JPushInterface.checkTagBindState(context,sequence,tag);
- break;
- case ACTION_GET:
- JPushInterface.getAllTags(context, sequence);
- break;
- case ACTION_CLEAN:
- JPushInterface.cleanTags(context, sequence);
- break;
- default:
- Logger.w(TAG,"unsupport tag action type");
- return;
- }
- }
- }
- private boolean RetryActionIfNeeded(int errorCode,TagAliasBean tagAliasBean){
- if(!ExampleUtil.isConnected(context)){
- Logger.w(TAG,"no network");
- return false;
- }
- //返回的错误码为6002 超时,6014 服务器繁忙,都建议延迟重试
- if(errorCode == 6002 || errorCode == 6014){
- Logger.d(TAG,"need retry");
- if(tagAliasBean!=null){
- Message message = new Message();
- message.what = DELAY_SEND_ACTION;
- message.obj = tagAliasBean;
- delaySendHandler.sendMessageDelayed(message,1000*60);
- String logs =getRetryStr(tagAliasBean.isAliasAction, tagAliasBean.action,errorCode);
- ExampleUtil.showToast(logs, context);
- return true;
- }
- }
- return false;
- }
- private boolean RetrySetMObileNumberActionIfNeeded(int errorCode,String mobileNumber){
- if(!ExampleUtil.isConnected(context)){
- Logger.w(TAG,"no network");
- return false;
- }
- //返回的错误码为6002 超时,6024 服务器内部错误,建议稍后重试
- if(errorCode == 6002 || errorCode == 6024){
- Logger.d(TAG,"need retry");
- Message message = new Message();
- message.what = DELAY_SET_MOBILE_NUMBER_ACTION;
- message.obj = mobileNumber;
- delaySendHandler.sendMessageDelayed(message,1000*60);
- String str = "Failed to set mobile number due to %s. Try again after 60s.";
- str = String.format(Locale.ENGLISH,str,(errorCode == 6002 ? "timeout" : "server internal error”"));
- ExampleUtil.showToast(str, context);
- return true;
- }
- return false;
- }
- private String getRetryStr(boolean isAliasAction,int actionType,int errorCode){
- String str = "Failed to %s %s due to %s. Try again after 60s.";
- str = String.format(Locale.ENGLISH,str,getActionStr(actionType),(isAliasAction? "alias" : " tags") ,(errorCode == 6002 ? "timeout" : "server too busy"));
- return str;
- }
- private String getActionStr(int actionType){
- switch (actionType){
- case ACTION_ADD:
- return "add";
- case ACTION_SET:
- return "set";
- case ACTION_DELETE:
- return "delete";
- case ACTION_GET:
- return "get";
- case ACTION_CLEAN:
- return "clean";
- case ACTION_CHECK:
- return "check";
- }
- return "unkonw operation";
- }
- public void onTagOperatorResult(Context context, JPushMessage jPushMessage) {
- int sequence = jPushMessage.getSequence();
- Logger.i(TAG,"action - onTagOperatorResult, sequence:"+sequence+",tags:"+jPushMessage.getTags());
- Logger.i(TAG,"tags size:"+jPushMessage.getTags().size());
- init(context);
- //根据sequence从之前操作缓存中获取缓存记录
- TagAliasBean tagAliasBean = (TagAliasBean)setActionCache.get(sequence);
- if(tagAliasBean == null){
- ExampleUtil.showToast("获取缓存记录失败", context);
- return;
- }
- if(jPushMessage.getErrorCode() == 0){
- Logger.i(TAG,"action - modify tag Success,sequence:"+sequence);
- setActionCache.remove(sequence);
- String logs = getActionStr(tagAliasBean.action)+" tags success";
- Logger.i(TAG,logs);
- ExampleUtil.showToast(logs, context);
- }else{
- String logs = "Failed to " + getActionStr(tagAliasBean.action)+" tags";
- if(jPushMessage.getErrorCode() == 6018){
- //tag数量超过限制,需要先清除一部分再add
- logs += ", tags is exceed limit need to clean";
- }
- logs += ", errorCode:" + jPushMessage.getErrorCode();
- Logger.e(TAG, logs);
- if(!RetryActionIfNeeded(jPushMessage.getErrorCode(),tagAliasBean)) {
- ExampleUtil.showToast(logs, context);
- }
- }
- }
- public void onCheckTagOperatorResult(Context context, JPushMessage jPushMessage){
- int sequence = jPushMessage.getSequence();
- Logger.i(TAG,"action - onCheckTagOperatorResult, sequence:"+sequence+",checktag:"+jPushMessage.getCheckTag());
- init(context);
- //根据sequence从之前操作缓存中获取缓存记录
- TagAliasBean tagAliasBean = (TagAliasBean)setActionCache.get(sequence);
- if(tagAliasBean == null){
- ExampleUtil.showToast("获取缓存记录失败", context);
- return;
- }
- if(jPushMessage.getErrorCode() == 0){
- Logger.i(TAG,"tagBean:"+tagAliasBean);
- setActionCache.remove(sequence);
- String logs = getActionStr(tagAliasBean.action)+" tag "+jPushMessage.getCheckTag() + " bind state success,state:"+jPushMessage.getTagCheckStateResult();
- Logger.i(TAG,logs);
- ExampleUtil.showToast(logs, context);
- }else{
- String logs = "Failed to " + getActionStr(tagAliasBean.action)+" tags, errorCode:" + jPushMessage.getErrorCode();
- Logger.e(TAG, logs);
- if(!RetryActionIfNeeded(jPushMessage.getErrorCode(),tagAliasBean)) {
- ExampleUtil.showToast(logs, context);
- }
- }
- }
- public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) {
- int sequence = jPushMessage.getSequence();
- Logger.i(TAG,"action - onAliasOperatorResult, sequence:"+sequence+",alias:"+jPushMessage.getAlias());
- init(context);
- //根据sequence从之前操作缓存中获取缓存记录
- TagAliasBean tagAliasBean = (TagAliasBean)setActionCache.get(sequence);
- if(tagAliasBean == null){
- ExampleUtil.showToast("获取缓存记录失败", context);
- return;
- }
- if(jPushMessage.getErrorCode() == 0){
- Logger.i(TAG,"action - modify alias Success,sequence:"+sequence);
- setActionCache.remove(sequence);
- String logs = getActionStr(tagAliasBean.action)+" alias success";
- Logger.i(TAG,logs);
- ExampleUtil.showToast(logs, context);
- }else{
- String logs = "Failed to " + getActionStr(tagAliasBean.action)+" alias, errorCode:" + jPushMessage.getErrorCode();
- Logger.e(TAG, logs);
- if(!RetryActionIfNeeded(jPushMessage.getErrorCode(),tagAliasBean)) {
- ExampleUtil.showToast(logs, context);
- }
- }
- }
- //设置手机号码回调
- public void onMobileNumberOperatorResult(Context context, JPushMessage jPushMessage) {
- int sequence = jPushMessage.getSequence();
- Logger.i(TAG,"action - onMobileNumberOperatorResult, sequence:"+sequence+",mobileNumber:"+jPushMessage.getMobileNumber());
- init(context);
- if(jPushMessage.getErrorCode() == 0){
- Logger.i(TAG,"action - set mobile number Success,sequence:"+sequence);
- setActionCache.remove(sequence);
- }else{
- String logs = "Failed to set mobile number, errorCode:" + jPushMessage.getErrorCode();
- Logger.e(TAG, logs);
- if(!RetrySetMObileNumberActionIfNeeded(jPushMessage.getErrorCode(),jPushMessage.getMobileNumber())){
- ExampleUtil.showToast(logs, context);
- }
- }
- }
- public static class TagAliasBean{
- int action;
- Set<String> tags;
- String alias;
- boolean isAliasAction;
- @Override
- public String toString() {
- return "TagAliasBean{" +
- "action=" + action +
- ", tags=" + tags +
- ", alias='" + alias + '\'' +
- ", isAliasAction=" + isAliasAction +
- '}';
- }
- }
- }
|