Android 极光推送的集成

        最近公司让集成极光推送,实现个人推送还有所有下载app 的推送。去极光官网看了下资料,发现极光更新了,从sdk.3.0.7 开始用新的设置别名和Tag的方法,以前的方法不再维护了。。。那肯定得研究新的方法,下面是我的一些心得体会,和大家分享下。

一、极光推送集成:

      集成的过程官网写的很清晰,我就不在重复了,需要的可以访问极光推送官网:https://docs.jiguang.cn/jpush/client/Android/android_guide/

二、推送到所有App 用户:

      使用JPushId 是最简单的方法:在你的代码中添加这句代码就可以了 

    String jPushId = JPushInterface.getRegistrationID(this);

三、推送到个人或者特定群体:

       我个人主要用的方法就是setAlias() 这个方法

       1、以前旧的方法,直接回调就可以设置别名成功,代码很简单:(可以参考JPush 官网中的代码)

        

// 这是来自 JPush Example 的设置别名的 Activity 里的代码。一般 App 的设置的调用入口,在任何方便的地方调用都可以。
private void setAlias() {
    EditText aliasEdit = (EditText) findViewById(R.id.et_alias);
    String alias = aliasEdit.getText().toString().trim();
    if (TextUtils.isEmpty(alias)) {
        Toast.makeText(PushSetActivity.this,R.string.error_alias_empty, Toast.LENGTH_SHORT).show();
        return;
    }
    if (!ExampleUtil.isValidTagAndAlias(alias)) {
        Toast.makeText(PushSetActivity.this,R.string.error_tag_gs_empty, Toast.LENGTH_SHORT).show();
        return;
    }

    // 调用 Handler 来异步设置别名
    mHandler.sendMessage(mHandler.obtainMessage(MSG_SET_ALIAS, alias));
}

private final TagAliasCallback mAliasCallback = new TagAliasCallback() {
    @Override
    public void gotResult(int code, String alias, Set<String> tags) {
        String logs ;
        switch (code) {
        case 0:
            logs = "Set tag and alias success";
            Log.i(TAG, logs);
            // 建议这里往 SharePreference 里写一个成功设置的状态。成功设置一次后,以后不必再次设置了。
            break;
        case 6002:
            logs = "Failed to set alias and tags due to timeout. Try again after 60s.";
            Log.i(TAG, logs);
            // 延迟 60 秒来调用 Handler 设置别名
            mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_SET_ALIAS, alias), 1000 * 60);
            break;
        default:
            logs = "Failed with errorCode = " + code;
            Log.e(TAG, logs);
        }
        ExampleUtil.showToast(logs, getApplicationContext());
    }
};
private static final int MSG_SET_ALIAS = 1001;
private final Handler mHandler = new Handler() {
@Override
    public void handleMessage(android.os.Message msg) {
        super.handleMessage(msg);
        switch (msg.what) {
            case MSG_SET_ALIAS:
                Log.d(TAG, "Set alias in handler.");
                // 调用 JPush 接口来设置别名。
                JPushInterface.setAliasAndTags(getApplicationContext(),
                                                (String) msg.obj,
                                                 null,
                                                 mAliasCallback);
            break;
        default:
            Log.i(TAG, "Unhandled msg - " + msg.what);
        }
    }                                       
};

     2、sdk 3.0.7 开始使用新的设置别名的方法

      新的设置别名的方法不能直接回调获得设置结果,是通过JPushMessageReceiver 这个广播来响应设置别名的结果,这算是其最大的改变点。参考demo 我用新方法做了推送的别名设置。

1)设置别名

 JPushInterface.setAlias(GlobalApplication.getContext(), KeyConfig.ALISE, (String) msg.obj);  // 第二个参数sequenc ,自己自定义的序列号; 第三个参数alias

2)设置别名后在广播中做别名的响应操作

public class JpushReciver extends JPushMessageReceiver {

    //设置别名反馈
    @Override
    public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) {
        TagAliasOperatorHelper.getInstance().onAliasOperatorResult(context, jPushMessage);  // 这个方法就是我们设置别名后结果,根据JPushMessage 做处理
        super.onAliasOperatorResult(context, jPushMessage);
    }
}


// 通过JPushMessage 来获取ErrorCode ,来做设置别名成功还是失败的操作

public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) {
        String alias = jPushMessage.getAlias();
        if (jPushMessage.getErrorCode() == 0) {
            GlobalApplication.spUtils.put(KeyConfig.ALIAS, alias);
        } else {
            String logs = "Failed to set alias and tags due to timeout. Try again after 60s.极光推送别名设置失败,60秒后重试";
            LogUtils.e(logs);
            // 延迟 60 秒来调用 Handler 设置别名
            mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_SET_ALIAS, alias), 1000 * 60);
        }
    }

四、附完整的TagAliasOperatorHelper 代码

public class TagAliasOperatorHelper {
    private static final int MSG_SET_ALIAS = 1;
    private static TagAliasOperatorHelper mInstance;
    public Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case MSG_SET_ALIAS:
                    LogUtils.e("Set alias in handler.");
                    //调用JPush 新接口来设置别名
                    JPushInterface.setAlias(GlobalApplication.getContext(), KeyConfig.ALISE, (String) msg.obj);
                    break;
                default:
                    LogUtils.e("Unhandled msg - " + msg.what);
            }
        }
    };

    public static TagAliasOperatorHelper getInstance() {
        if (mInstance == null) {
            synchronized (TagAliasOperatorHelper.class) {
                if (mInstance == null) {
                    mInstance = new TagAliasOperatorHelper();
                }
            }
        }
        return mInstance;
    }

    public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) {
        String alias = jPushMessage.getAlias();
        if (jPushMessage.getErrorCode() == 0) {
            GlobalApplication.spUtils.put(KeyConfig.ALIAS, alias);
        } else {
            String logs = "Failed to set alias and tags due to timeout. Try again after 60s.极光推送别名设置失败,60秒后重试";
            LogUtils.e(logs);
            // 延迟 60 秒来调用 Handler 设置别名
            mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_SET_ALIAS, alias), 1000 * 60);
        }
    }

}


五、Tags 的设置新方法与Alias 类似

      设置结果调用广播中onTagOperatorResult()方法。// 具体的操作我没有怎么实现,不过原理都是一样的。

 @Override
    public void onTagOperatorResult(Context context,JPushMessage jPushMessage) {
        //操作设置Tag后的响应
        super.onTagOperatorResult(context, jPushMessage);
    }





猜你喜欢

转载自blog.csdn.net/cherry459/article/details/77535651