zoukankan      html  css  js  c++  java
  • android极光推送初步了解

    推送可以及时,主动的与用户发起交互

    (1)继承jar包,照示例AndroidManifest.xml添加.

    (2)自定义MyApp继承自Application,在onCreate方法中调用JPushInterface.init(MainActivity.this);

    或者在Activity的onCreate中调用.

    (3)另外,在activity的onResume方法要调用JPushInterface.onResume(this);否则,推送不会出现,

    在onPause中调用JPushInterface.onPause(this);

    这样,可以通过服务器往安装了App的所有用户发送一条推送.

     

    通过Alias往客户端发送信息.

    在客户端的onCreate中

    JPushInterface.setAlias(MainActivity.this, "aa", new TagAliasCallback() {
    
                        @Override
    
                        public void gotResult(int arg0, String arg1, Set<String> arg2) {
    
                            Log.e("info",arg1+"-----------");
    
                            //arg1是tag
    
                        }
    
                    });


    这句就是将"aa"当成该设备的别名,达到往指定客户端发送消息的目的.

     

    别名和签名设置的异常处理

    有时会因为网络原因,有一定几率设置别名或标签失败.

    privatevoidsetAlias() {
    
    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));
    }
    
    privatefinalTagAliasCallback mAliasCallback =newTagAliasCallback() {
    
    @Override
    
    publicvoidgotResult(intcode, String alias, Set<String> tags) {
    
    String logs ;
    
    switch(code) {
    
    case:
    
    logs ="Set tag and alias success";
    
    Log.i(TAG, logs);
    
    break;
    
    case:
    
    logs ="Failed to set alias and tags due to timeout. Try again after 60s.";
    
    Log.i(TAG, logs);
    
    mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_SET_ALIAS, alias),*);
    
    break;
    
    default:
    
    logs ="Failed with errorCode = "+ code;
    
    Log.e(TAG, logs);
    
    }
    
     
    
    ExampleUtil.showToast(logs, getApplicationContext());
    
    }
    };
    
    privatestaticfinalintMSG_SET_ALIAS =;
    
    privatefinalHandler mHandler =newHandler() {
    
    @Override
    
    publicvoidhandleMessage(android.os.Message msg) {
    
    super.handleMessage(msg);
    
    switch(msg.what) {
    
    caseMSG_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);
    
    }
    
    }
    };


    自定义通知栏的样式

    自定义样式放在init()之后.

                    CustomPushNotificationBuilder builder=new CustomPushNotificationBuilder(MainActivity.this, R.layout.my_push, R.id.iv_push, R.id.tv_title, R.id.tv_content);
    
                    builder.statusBarDrawable=R.drawable.ic_category_2;//最顶层状态栏小图标
    
                    builder.layoutIconDrawable=R.drawable.ic_category_2;  //下拉状态时显示的通知图标.
    
                    JPushInterface.setPushNotificationBuilder(2, builder);
    JPushInterface.setDefaultPushNotificationBuilder(builder); //设置该对话框为默认


    .自定义消息:

    所接收的消息不再局限于Notification,而是可以直接取出消息中的内容,从而用自己的方式显示给用户.

    此时需要自定义一个MyReceiver继承自BroadcastReceiver.

    public class MyReceiver extends BroadcastReceiver {
    
        @Override
    
        public void onReceive(Context ctx, Intent intent) {
    
            Bundle bundle =intent.getExtras();   //接受到消息
    
            
    
            Log.e("info", "[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle));
    
              if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
    
                    String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
    
                    Log.d("info", "[MyReceiver] 接收Registration Id : " + regId);
    
                    //send the Registration Id to your server...
    
                                
    
                } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
    
                    Log.d("info", "[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));
    
    //                processCustomMessage(ctx, bundle);
    
                
    
                } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
    
                    Log.d("info", "[MyReceiver] 接收到推送下来的通知");
    
                    int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
    
                    Log.d("info", "[MyReceiver] 接收到推送下来的通知的ID: " + notifactionId);
    
                    
    
                } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
    
                    Log.d("info", "[MyReceiver] 用户点击打开了通知");
    
                    JPushInterface.reportNotificationOpened(ctx, bundle.getString(JPushInterface.EXTRA_MSG_ID));
    
                   
    
    //                //打开自定义的Activity
    
                    Intent i = new Intent(ctx, TwoActivity.class);
    
                    i.putExtras(bundle);
    
                    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    
                    ctx.startActivity(i);
    
                    
    
                }
    
            
    
        }
    
        // 打印所有的 intent extra 数据
    
        private static String printBundle(Bundle bundle) {
    
            StringBuilder sb = new StringBuilder();
    
            for (String key : bundle.keySet()) {
    
                if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) {
    
                    sb.append("/nkey:" + key + ", value:" + bundle.getInt(key));
    
                } else {
    
                    sb.append("/nkey:" + key + ", value:" + bundle.getString(key));
    
                }
    
            }
    
            return sb.toString();
    
        }


    在类中接收完消息后,还需要在AndroidManifest.xml中添加

                    <!--自定义接收  -->

    <receiver
    
        android:name="com.lj.pushdemo1.MyReceiver"
    
        android:enabled="true">
    
        <intent-filter>
    
            <action android:name="cn.jpush.android.intent.REGISTRATION" />
    
            <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
    
            <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
    
            <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
    
            <category android:name="com.lj.pushdemo1" />
    
        </intent-filter>
    
    </receiver>


    获取 RegistrationID API

    集成了JPush SDK的应用程序第一次注册到JPush服务器时,服务器会返回一个唯一的该设备的标识:RegistertionID.

    String id=JPushInterface.getRegistrationID(MainActivity.this);

     

    调用网络接口来发送消息

     

     

    sendno:发送的编号.

    app_key: 应用程序的appKey

    receiver_type:接受者的类型 ----2.指定tag----3.指定alias----4.广播----5.根据registrationId进行推送.

    msg_content:发送的内容,在这里必须要JSON格式.

    platform:要发送的平台

    verfication_code:将sendno+receiver_typ+receiver_values+API MasterSecret(在应用的详细信息里面)字符串拼接起来后,用md5加密

     

    设置保留最近通知条数 API

    JPushInterface.init(context);
    
    JPushInterface.setLatestNotificationNumber(context,);保留最近的3条

    关注公众号,分享干货,讨论技术




  • 相关阅读:
    web服务器-Apache
    nginx优化
    nginx下载限速
    nginx-URL重写
    HDU 5358 First One 求和(序列求和,优化)
    HDU 5360 Hiking 登山 (优先队列,排序)
    HDU 5353 Average 糖果分配(模拟,图)
    UVALive 4128 Steam Roller 蒸汽式压路机(最短路,变形) WA中。。。。。
    HDU 5348 MZL's endless loop 给边定向(欧拉回路,最大流)
    HDU 5344 MZL's xor (水题)
  • 原文地址:https://www.cnblogs.com/molashaonian/p/9097672.html
Copyright © 2011-2022 走看看