Advertisement

Android 极光推送的集成

阅读量:

最近公司布置使用极光服务实现个人及下载应用的推送功能。访问官方资料库查看详细信息后发现,自sdk.3.0.7版本起,极光已采用新的设置别名与Tag配置方式取代旧的方法,该旧方案已不再支持使用

一、极光推送集成:

关于集成过程的说明非常详细,请您无需赘述即可。有关极光推送的功能详情,请访问极光推送官方文档:https://docs.jiguang.cn/jpush/client/Android/android_guide/

二、推送到所有App 用户:

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

复制代码
    String jPushId = JPushInterface.getRegistrationID(this);
    
    代码解读

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

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

早期的传统方法通过直接回调操作实现了别名的设置成功,并且代码实现过程较为简单:(可以参考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 开始使用新的设置别名的方法

另一种设置别名的方案无法直接调用获取设置结果 取而代之的是该广播机制负责响应相关设置的变化 这可视为其最显著的特点之一 参考示例中我采用这种方法实现了推送给指定角色的角色重定向

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 获取其返回的错误代码,并根据返回值判断设置别名成功与否的操作是否正确执行

复制代码
 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);
    
     }
    
    
    
    
    代码解读

全部评论 (0)

还没有任何评论哟~