• 关于

    获取activity实例

    的搜索结果

回答

不建议这么做。 service中如果持有activity的实例, 在service没有被销毁之前,activity无法被回收会导致内存泄露问题。当然如果非要这么做,你可以获取当前堆栈的栈顶activity
爵霸 2019-12-02 01:56:23 0 浏览量 回答数 0

问题

Android API 设计比较糟糕的一个地方:报错

最近接触 Android 多了些,也写了不少的代码,但老是觉得很便扭的一个地方: 很多很多的 API 都需要一个 Context 的参数,例如判断网络是否连接的 Connectivi...
kun坤 2020-06-06 16:49:37 0 浏览量 回答数 1

问题

关于android中 activity启动 和数据的传递问题

有以下两个activity 简称 A B 。A是主界面,在A中的onDestory方法中,我删除了用户的临时数据,A里面有一个按钮 可以启动到B 在B里面查询一些数据 然后吧数据传递给A,A获取到数据之后,吧数据显示在A界面上,问题是:当B...
爵霸 2019-12-01 20:22:00 906 浏览量 回答数 1

回答

由于SQLiteOpenHelper内部只缓存一个数据库的连接(即一个SQLiteDatabase 实例),所以,当SQLiteOpenHelper被多个线程调用的时候,就需要注意了。譬如:线程A通过getWritableDatabase()获取了一个SQLiteDatabase 用来进行删除记录操作,线程B通过getReadableDatabase()获取了一个SQLiteDatabase 用来进行其它操作,操作已完成正在close()。当线程A还在进行删除记录操作的时候,线程B调用了SQLiteDatabase.close()方法断开了数据库连接,那么将会导致线程A的删除操作出现异常 所以,一般来说不要随便close(),我认为在在Activity执行onDestory的时候调用close()比较合理,或者整个App退出的时候再close()。
爵霸 2019-12-02 02:15:35 0 浏览量 回答数 0

回答

1、在这段代码中,为什么要使用Bundle对象向fragment传入参数?使用Bundle向Fragment传入参数,Fragment可以在初始化的时候通过getArguments()获取传入的数据,就像启动一个Activity的时候可以putExtra("data", bundel)来传入参数一样。2、我直接就定义一个FragmentTransaction对象,然后调用replace(--)和commit()方法有没有问题?有问题。你怎么直接定义一个FragmentTransaction对象?它是抽象类。应该使用FragmentTransaction fTransaction = getSupportFragmentManager().beginTransaction(); 来获取FragmentTransaction实例。3、argsBundle.putInt的参数DummyFragment.ARG_SELECTION_NUMBER, arg0.getPosition()+1这是什么意思?第一个参数是key,第二个参数是value。Fragment可以在初始化的时候通过getArguments()获得Bundle,然后根据key获取值。此处value:arg0.getPosition()+1表示此Fragment的位置。
爵霸 2019-12-02 02:24:11 0 浏览量 回答数 0

回答

1、Java ThreadLocal是和单个线程相关的变量,没有线程安全问题,自带自用,好比每个人出去旅游自带水壶一样,不会互相争用,。 2、每个线程都有自己的ThreadLocal变量,3、线程可以使用它的get()和set()方法来获取默认值或将其值更改为Thread的本地值。4、ThreadLocal实例通常是希望将状态与线程相关联的类中的私有静态字段。 阿里巴巴云栖社区Java专场12月22日周六下午 杭州,https://yq.aliyun.com/activity/796不少同学 高铁 飞机来杭州参加大会
徐雷frank 2019-12-02 01:49:22 0 浏览量 回答数 0

问题

Android Socket编程学习笔记?报错

      度娘给出的描述: 通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种...
爱吃鱼的程序员 2020-06-22 19:57:11 0 浏览量 回答数 1

回答

Android平台进行数据存储的五大方式,分别如下: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面详细讲解这五种方式的特点 第一种: 使用SharedPreferences存储数据 适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型、基本类型的值。比如应用程序的各种配置信息(如是否打开音效、是否使用震动效果、小游戏的玩家积分等),解锁口 令密码等 核心原理:保存基于XML文件存储的key-value键值对数据,通常用来存储一些简单的配置信息。通过DDMS的File Explorer面板,展开文件浏览树,很明显SharedPreferences数据总是存储在/data/data/<package name>/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过SharedPreferences.edit()获取的内部接口Editor对象实现。 SharedPreferences本身是一 个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的getSharedPreferences(String name, int mode)方法来获取SharedPreferences实例,该方法中name表示要操作的xml文件名,第二个参数具体如下: Context.MODE_PRIVATE: 指定该SharedPreferences数据只能被本应用程序读、写。 Context.MODE_WORLD_READABLE: 指定该SharedPreferences数据能被其他应用程序读,但不能写。 Context.MODE_WORLD_WRITEABLE: 指定该SharedPreferences数据能被其他应用程序读,写 Editor有如下主要重要方法: SharedPreferences.Editor clear():清空SharedPreferences里所有数据 SharedPreferences.Editor putXxx(String key , xxx value): 向SharedPreferences存入指定key对应的数据,其中xxx 可以是boolean,float,int等各种基本类型据 SharedPreferences.Editor remove(): 删除SharedPreferences中指定key对应的数据项 boolean commit(): 当Editor编辑完成后,使用该方法提交修改 实际案例:运行界面如下 这里只提供了两个按钮和一个输入文本框,布局简单,故在此不给出界面布局文件了,程序核心代码如下: 、class ViewOcl implements View.OnClickListener{ @Override public void onClick(View v) { switch(v.getId()){ case R.id.btnSet: //步骤1:获取输入值 String code = txtCode.getText().toString().trim(); //步骤2-1:创建一个SharedPreferences.Editor接口对象,lock表示要写入的XML文件名,MODE_WORLD_WRITEABLE写操作 SharedPreferences.Editor editor = getSharedPreferences("lock", MODE_WORLD_WRITEABLE).edit(); //步骤2-2:将获取过来的值放入文件 editor.putString("code", code); //步骤3:提交 editor.commit(); Toast.makeText(getApplicationContext(), "口令设置成功", Toast.LENGTH_LONG).show(); break; case R.id.btnGet: //步骤1:创建一个SharedPreferences接口对象 SharedPreferences read = getSharedPreferences("lock", MODE_WORLD_READABLE); //步骤2:获取文件中的值 String value = read.getString("code", ""); Toast.makeText(getApplicationContext(), "口令为:"+value, Toast.LENGTH_LONG).show(); break; } } } 、读写其他应用的SharedPreferences: 步骤如下 1、在创建SharedPreferences时,指定MODE_WORLD_READABLE模式,表明该SharedPreferences数据可以被其他程序读取 2、创建其他应用程序对应的Context: Context pvCount = createPackageContext("com.tony.app", Context.CONTEXT_IGNORE_SECURITY);这里的com.tony.app就是其他程序的包名 3、使用其他程序的Context获取对应的SharedPreferences SharedPreferences read = pvCount.getSharedPreferences("lock", Context.MODE_WORLD_READABLE); 4、如果是写入数据,使用Editor接口即可,所有其他操作均和前面一致。 SharedPreferences对象与SQLite数据库相比,免去了创建数据库,创建表,写SQL语句等诸多操作,相对而言更加方便,简洁。但是SharedPreferences也有其自身缺陷,比如其职能存储boolean,int,float,long和String五种简单的数据类型,比如其无法进行条件查询等。所以不论SharedPreferences的数据存储操作是如何简单,它也只能是存储方式的一种补充,而无法完全替代如SQLite数据库这样的其他数据存储方式。 第二种: 文件存储数据 核心原理: Context提供了两个方法来打开数据文件里的文件IO流 FileInputStream openFileInput(String name); FileOutputStream(String name , int mode),这两个方法第一个参数 用于指定文件名,第二个参数指定打开文件的模式。具体有以下值可选: MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可 以使用Context.MODE_APPEND MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。 MODE_WORLD_READABLE:表示当前文件可以被其他应用读取; MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。 除此之外,Context还提供了如下几个重要的方法: getDir(String name , int mode):在应用程序的数据文件夹下获取或者创建name对应的子目录 File getFilesDir():获取该应用程序的数据文件夹得绝对路径 String[] fileList():返回该应用数据文件夹的全部文件 public String read() { try { FileInputStream inStream = this.openFileInput("message.txt"); byte[] buffer = new byte[1024]; int hasRead = 0; StringBuilder sb = new StringBuilder(); while ((hasRead = inStream.read(buffer)) != -1) { sb.append(new String(buffer, 0, hasRead)); } inStream.close(); return sb.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } public void write(String msg){ // 步骤1:获取输入值 if(msg == null) return; try { // 步骤2:创建一个FileOutputStream对象,MODE_APPEND追加模式 FileOutputStream fos = openFileOutput("message.txt", MODE_APPEND); // 步骤3:将获取过来的值放入文件 fos.write(msg.getBytes()); // 步骤4:关闭数据流 fos.close(); } catch (Exception e) { e.printStackTrace(); } } openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。创建的文件保存在/data/data//files目录,如: /data/data/cn.tony.app/files/message.txt, 下面讲解某些特殊文件读写需要注意的地方: 读写sdcard上的文件 其中读写步骤按如下进行: 1、调用Environment的getExternalStorageState()方法判断手机上是否插了sd卡,且应用程序具有读写SD卡的权限,如下代码将返回true Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) 2、调用Environment.getExternalStorageDirectory()方法来获取外部存储器,也就是SD卡的目录,或者使用"/mnt/sdcard/"目录 3、使用IO流操作SD卡上的文件 注意点:手机应该已插入SD卡,对于模拟器而言,可通过mksdcard命令来创建虚拟存储卡 必须在AndroidManifest.xml上配置读写SD卡的权限 // 文件写操作函数 private void write(String content) { if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { // 如果sdcard存在 File file = new File(Environment.getExternalStorageDirectory() .toString() + File.separator + DIR + File.separator + FILENAME); // 定义File类对象 if (!file.getParentFile().exists()) { // 父文件夹不存在 file.getParentFile().mkdirs(); // 创建文件夹 } PrintStream out = null; // 打印流对象用于输出 try { out = new PrintStream(new FileOutputStream(file, true)); // 追加文件 out.println(content); } catch (Exception e) { e.printStackTrace(); } finally { if (out != null) { out.close(); // 关闭打印流 } } } else { // SDCard不存在,使用Toast提示用户 Toast.makeText(this, "保存失败,SD卡不存在!", Toast.LENGTH_LONG).show(); } } // 文件读操作函数 private String read() { if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { // 如果sdcard存在 File file = new File(Environment.getExternalStorageDirectory() .toString() + File.separator + DIR + File.separator + FILENAME); // 定义File类对象 if (!file.getParentFile().exists()) { // 父文件夹不存在 file.getParentFile().mkdirs(); // 创建文件夹 } Scanner scan = null; // 扫描输入 StringBuilder sb = new StringBuilder(); try { scan = new Scanner(new FileInputStream(file)); // 实例化Scanner while (scan.hasNext()) { // 循环读取 sb.append(scan.next() + "\n"); // 设置文本 } return sb.toString(); } catch (Exception e) { e.printStackTrace(); } finally { if (scan != null) { scan.close(); // 关闭打印流 } } } else { // SDCard不存在,使用Toast提示用户 Toast.makeText(this, "读取失败,SD卡不存在!", Toast.LENGTH_LONG).show(); } return null; } 复制代码 第三种:SQLite存储数据 SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。现在的主流移动设备像Android、iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到SQLite来存储我们大量的数据,所以我们就需要掌握移动设备上的SQLite开发技巧 SQLiteDatabase类为我们提供了很多种方法,上面的代码中基本上囊括了大部分的数据库操作;对于添加、更新和删除来说,我们都可以使用 1 db.executeSQL(String sql); 2 db.executeSQL(String sql, Object[] bindArgs);//sql语句中使用占位符,然后第二个参数是实际的参数集 除了统一的形式之外,他们还有各自的操作方法: 1 db.insert(String table, String nullColumnHack, ContentValues values); 2 db.update(String table, Contentvalues values, String whereClause, String whereArgs); 3 db.delete(String table, String whereClause, String whereArgs);以上三个方法的第一个参数都是表示要操作的表名;insert中的第二个参数表示如果插入的数据每一列都为空的话,需要指定此行中某一列的名称,系统将此列设置为NULL,不至于出现错误;insert中的第三个参数是ContentValues类型的变量,是键值对组成的Map,key代表列名,value代表该列要插入的值;update的第二个参数也很类似,只不过它是更新该字段key为最新的value值,第三个参数whereClause表示WHERE表达式,比如“age > ? and age < ?”等,最后的whereArgs参数是占位符的实际参数值;delete方法的参数也是一样 下面给出demo 数据的添加 1.使用insert方法 复制代码1 ContentValues cv = new ContentValues();//实例化一个ContentValues用来装载待插入的数据2 cv.put("title","you are beautiful");//添加title3 cv.put("weather","sun"); //添加weather4 cv.put("context","xxxx"); //添加context5 String publish = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")6 .format(new Date());7 cv.put("publish ",publish); //添加publish8 db.insert("diary",null,cv);//执行插入操作复制代码2.使用execSQL方式来实现 String sql = "insert into user(username,password) values ('Jack Johnson','iLovePopMuisc');//插入操作的SQL语句db.execSQL(sql);//执行SQL语句数据的删除 同样有2种方式可以实现 String whereClause = "username=?";//删除的条件String[] whereArgs = {"Jack Johnson"};//删除的条件参数db.delete("user",whereClause,whereArgs);//执行删除使用execSQL方式的实现 String sql = "delete from user where username='Jack Johnson'";//删除操作的SQL语句db.execSQL(sql);//执行删除操作数据修改 同上,仍是2种方式 ContentValues cv = new ContentValues();//实例化ContentValuescv.put("password","iHatePopMusic");//添加要更改的字段及内容String whereClause = "username=?";//修改条件String[] whereArgs = {"Jack Johnson"};//修改条件的参数db.update("user",cv,whereClause,whereArgs);//执行修改使用execSQL方式的实现 String sql = "update user set password = 'iHatePopMusic' where username='Jack Johnson'";//修改的SQL语句db.execSQL(sql);//执行修改数据查询 下面来说说查询操作。查询操作相对于上面的几种操作要复杂些,因为我们经常要面对着各种各样的查询条件,所以系统也考虑到这种复杂性,为我们提供了较为丰富的查询形式: 1 db.rawQuery(String sql, String[] selectionArgs); 2 db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy); 3 db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit); 4 db.query(String distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit); 上面几种都是常用的查询方法,第一种最为简单,将所有的SQL语句都组织到一个字符串中,使用占位符代替实际参数,selectionArgs就是占位符实际参数集; 各参数说明: table:表名称colums:表示要查询的列所有名称集selection:表示WHERE之后的条件语句,可以使用占位符selectionArgs:条件语句的参数数组groupBy:指定分组的列名having:指定分组条件,配合groupBy使用orderBy:y指定排序的列名limit:指定分页参数distinct:指定“true”或“false”表示要不要过滤重复值Cursor:返回值,相当于结果集ResultSet最后,他们同时返回一个Cursor对象,代表数据集的游标,有点类似于JavaSE中的ResultSet。下面是Cursor对象的常用方法: 复制代码 1 c.move(int offset); //以当前位置为参考,移动到指定行 2 c.moveToFirst(); //移动到第一行 3 c.moveToLast(); //移动到最后一行 4 c.moveToPosition(int position); //移动到指定行 5 c.moveToPrevious(); //移动到前一行 6 c.moveToNext(); //移动到下一行 7 c.isFirst(); //是否指向第一条 8 c.isLast(); //是否指向最后一条 9 c.isBeforeFirst(); //是否指向第一条之前 10 c.isAfterLast(); //是否指向最后一条之后 11 c.isNull(int columnIndex); //指定列是否为空(列基数为0) 12 c.isClosed(); //游标是否已关闭 13 c.getCount(); //总数据项数 14 c.getPosition(); //返回当前游标所指向的行数 15 c.getColumnIndex(String columnName);//返回某列名对应的列索引值 16 c.getString(int columnIndex); //返回当前行指定列的值 复制代码实现代码 复制代码String[] params = {12345,123456};Cursor cursor = db.query("user",columns,"ID=?",params,null,null,null);//查询并获得游标if(cursor.moveToFirst()){//判断游标是否为空 for(int i=0;i<cursor.getCount();i++){ cursor.move(i);//移动到指定记录 String username = cursor.getString(cursor.getColumnIndex("username"); String password = cursor.getString(cursor.getColumnIndex("password")); } }复制代码通过rawQuery实现的带参数查询 复制代码Cursor result=db.rawQuery("SELECT ID, name, inventory FROM mytable");//Cursor c = db.rawQuery("s name, inventory FROM mytable where ID=?",new Stirng[]{"123456"}); result.moveToFirst(); while (!result.isAfterLast()) { int id=result.getInt(0); String name=result.getString(1); int inventory=result.getInt(2); // do something useful with these result.moveToNext(); } result.close();复制代码 在上面的代码示例中,已经用到了这几个常用方法中的一些,关于更多的信息,大家可以参考官方文档中的说明。 最后当我们完成了对数据库的操作后,记得调用SQLiteDatabase的close()方法释放数据库连接,否则容易出现SQLiteException。 上面就是SQLite的基本应用,但在实际开发中,为了能够更好的管理和维护数据库,我们会封装一个继承自SQLiteOpenHelper类的数据库操作类,然后以这个类为基础,再封装我们的业务逻辑方法。 这里直接使用案例讲解:下面是案例demo的界面 SQLiteOpenHelper类介绍 SQLiteOpenHelper是SQLiteDatabase的一个帮助类,用来管理数据库的创建和版本的更新。一般是建立一个类继承它,并实现它的onCreate和onUpgrade方法。 方法名 方法描述SQLiteOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version) 构造方法,其中 context 程序上下文环境 即:XXXActivity.this; name :数据库名字; factory:游标工厂,默认为null,即为使用默认工厂; version 数据库版本号 onCreate(SQLiteDatabase db) 创建数据库时调用onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion) 版本更新时调用getReadableDatabase() 创建或打开一个只读数据库getWritableDatabase() 创建或打开一个读写数据库首先创建数据库类 复制代码 1 import android.content.Context; 2 import android.database.sqlite.SQLiteDatabase; 3 import android.database.sqlite.SQLiteDatabase.CursorFactory; 4 import android.database.sqlite.SQLiteOpenHelper; 5 6 public class SqliteDBHelper extends SQLiteOpenHelper { 7 8 // 步骤1:设置常数参量 9 private static final String DATABASE_NAME = "diary_db";10 private static final int VERSION = 1;11 private static final String TABLE_NAME = "diary";12 13 // 步骤2:重载构造方法14 public SqliteDBHelper(Context context) {15 super(context, DATABASE_NAME, null, VERSION);16 }17 18 /*19 * 参数介绍:context 程序上下文环境 即:XXXActivity.this 20 * name 数据库名字 21 * factory 接收数据,一般情况为null22 * version 数据库版本号23 */24 public SqliteDBHelper(Context context, String name, CursorFactory factory,25 int version) {26 super(context, name, factory, version);27 }28 //数据库第一次被创建时,onCreate()会被调用29 @Override30 public void onCreate(SQLiteDatabase db) {31 // 步骤3:数据库表的创建32 String strSQL = "create table "33 + TABLE_NAME34 + "(tid integer primary key autoincrement,title varchar(20),weather varchar(10),context text,publish date)";35 //步骤4:使用参数db,创建对象36 db.execSQL(strSQL);37 }38 //数据库版本变化时,会调用onUpgrade()39 @Override40 public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {41 42 }43 }复制代码正如上面所述,数据库第一次创建时onCreate方法会被调用,我们可以执行创建表的语句,当系统发现版本变化之后,会调用onUpgrade方法,我们可以执行修改表结构等语句。 我们需要一个Dao,来封装我们所有的业务方法,代码如下: 复制代码 1 import android.content.Context; 2 import android.database.Cursor; 3 import android.database.sqlite.SQLiteDatabase; 4 5 import com.chinasoft.dbhelper.SqliteDBHelper; 6 7 public class DiaryDao { 8 9 private SqliteDBHelper sqliteDBHelper;10 private SQLiteDatabase db;11 12 // 重写构造方法13 public DiaryDao(Context context) {14 this.sqliteDBHelper = new SqliteDBHelper(context);15 db = sqliteDBHelper.getWritableDatabase();16 }17 18 // 读操作19 public String execQuery(final String strSQL) {20 try {21 System.out.println("strSQL>" + strSQL);22 // Cursor相当于JDBC中的ResultSet23 Cursor cursor = db.rawQuery(strSQL, null);24 // 始终让cursor指向数据库表的第1行记录25 cursor.moveToFirst();26 // 定义一个StringBuffer的对象,用于动态拼接字符串27 StringBuffer sb = new StringBuffer();28 // 循环游标,如果不是最后一项记录29 while (!cursor.isAfterLast()) {30 sb.append(cursor.getInt(0) + "/" + cursor.getString(1) + "/"31 + cursor.getString(2) + "/" + cursor.getString(3) + "/"32 + cursor.getString(4)+"#");33 //cursor游标移动34 cursor.moveToNext();35 }36 db.close();37 return sb.deleteCharAt(sb.length()-1).toString();38 } catch (RuntimeException e) {39 e.printStackTrace();40 return null;41 }42 43 }44 45 // 写操作46 public boolean execOther(final String strSQL) {47 db.beginTransaction(); //开始事务48 try {49 System.out.println("strSQL" + strSQL);50 db.execSQL(strSQL);51 db.setTransactionSuccessful(); //设置事务成功完成 52 db.close();53 return true;54 } catch (RuntimeException e) {55 e.printStackTrace();56 return false;57 }finally { 58 db.endTransaction(); //结束事务 59 } 60 61 }62 }复制代码我们在Dao构造方法中实例化sqliteDBHelper并获取一个SQLiteDatabase对象,作为整个应用的数据库实例;在增删改信息时,我们采用了事务处理,确保数据完整性;最后要注意释放数据库资源db.close(),这一个步骤在我们整个应用关闭时执行,这个环节容易被忘记,所以朋友们要注意。 我们获取数据库实例时使用了getWritableDatabase()方法,也许朋友们会有疑问,在getWritableDatabase()和getReadableDatabase()中,你为什么选择前者作为整个应用的数据库实例呢?在这里我想和大家着重分析一下这一点。 我们来看一下SQLiteOpenHelper中的getReadableDatabase()方法: 复制代码 1 public synchronized SQLiteDatabase getReadableDatabase() { 2 if (mDatabase != null && mDatabase.isOpen()) { 3 // 如果发现mDatabase不为空并且已经打开则直接返回 4 return mDatabase; 5 } 6 7 if (mIsInitializing) { 8 // 如果正在初始化则抛出异常 9 throw new IllegalStateException("getReadableDatabase called recursively"); 10 } 11 12 // 开始实例化数据库mDatabase 13 14 try { 15 // 注意这里是调用了getWritableDatabase()方法 16 return getWritableDatabase(); 17 } catch (SQLiteException e) { 18 if (mName == null) 19 throw e; // Can't open a temp database read-only! 20 Log.e(TAG, "Couldn't open " + mName + " for writing (will try read-only):", e); 21 } 22 23 // 如果无法以可读写模式打开数据库 则以只读方式打开 24 25 SQLiteDatabase db = null; 26 try { 27 mIsInitializing = true; 28 String path = mContext.getDatabasePath(mName).getPath();// 获取数据库路径 29 // 以只读方式打开数据库 30 db = SQLiteDatabase.openDatabase(path, mFactory, SQLiteDatabase.OPEN_READONLY); 31 if (db.getVersion() != mNewVersion) { 32 throw new SQLiteException("Can't upgrade read-only database from version " + db.getVersion() + " to " 33 + mNewVersion + ": " + path); 34 } 35 36 onOpen(db); 37 Log.w(TAG, "Opened " + mName + " in read-only mode"); 38 mDatabase = db;// 为mDatabase指定新打开的数据库 39 return mDatabase;// 返回打开的数据库 40 } finally { 41 mIsInitializing = false; 42 if (db != null && db != mDatabase) 43 db.close(); 44 } 45 }复制代码在getReadableDatabase()方法中,首先判断是否已存在数据库实例并且是打开状态,如果是,则直接返回该实例,否则试图获取一个可读写模式的数据库实例,如果遇到磁盘空间已满等情况获取失败的话,再以只读模式打开数据库,获取数据库实例并返回,然后为mDatabase赋值为最新打开的数据库实例。既然有可能调用到getWritableDatabase()方法,我们就要看一下了: 复制代码public synchronized SQLiteDatabase getWritableDatabase() { if (mDatabase != null && mDatabase.isOpen() && !mDatabase.isReadOnly()) { // 如果mDatabase不为空已打开并且不是只读模式 则返回该实例 return mDatabase; } if (mIsInitializing) { throw new IllegalStateException("getWritableDatabase called recursively"); } // If we have a read-only database open, someone could be using it // (though they shouldn't), which would cause a lock to be held on // the file, and our attempts to open the database read-write would // fail waiting for the file lock. To prevent that, we acquire the // lock on the read-only database, which shuts out other users. boolean success = false; SQLiteDatabase db = null; // 如果mDatabase不为空则加锁 阻止其他的操作 if (mDatabase != null) mDatabase.lock(); try { mIsInitializing = true; if (mName == null) { db = SQLiteDatabase.create(null); } else { // 打开或创建数据库 db = mContext.openOrCreateDatabase(mName, 0, mFactory); } // 获取数据库版本(如果刚创建的数据库,版本为0) int version = db.getVersion(); // 比较版本(我们代码中的版本mNewVersion为1) if (version != mNewVersion) { db.beginTransaction();// 开始事务 try { if (version == 0) { // 执行我们的onCreate方法 onCreate(db); } else { // 如果我们应用升级了mNewVersion为2,而原版本为1则执行onUpgrade方法 onUpgrade(db, version, mNewVersion); } db.setVersion(mNewVersion);// 设置最新版本 db.setTransactionSuccessful();// 设置事务成功 } finally { db.endTransaction();// 结束事务 } } onOpen(db); success = true; return db;// 返回可读写模式的数据库实例 } finally { mIsInitializing = false; if (success) { // 打开成功 if (mDatabase != null) { // 如果mDatabase有值则先关闭 try { mDatabase.close(); } catch (Exception e) { } mDatabase.unlock();// 解锁 } mDatabase = db;// 赋值给mDatabase } else { // 打开失败的情况:解锁、关闭 if (mDatabase != null) mDatabase.unlock(); if (db != null) db.close(); } } }复制代码大家可以看到,几个关键步骤是,首先判断mDatabase如果不为空已打开并不是只读模式则直接返回,否则如果mDatabase不为空则加锁,然后开始打开或创建数据库,比较版本,根据版本号来调用相应的方法,为数据库设置新版本号,最后释放旧的不为空的mDatabase并解锁,把新打开的数据库实例赋予mDatabase,并返回最新实例。 看完上面的过程之后,大家或许就清楚了许多,如果不是在遇到磁盘空间已满等情况,getReadableDatabase()一般都会返回和getWritableDatabase()一样的数据库实例,所以我们在DBManager构造方法中使用getWritableDatabase()获取整个应用所使用的数据库实例是可行的。当然如果你真的担心这种情况会发生,那么你可以先用getWritableDatabase()获取数据实例,如果遇到异常,再试图用getReadableDatabase()获取实例,当然这个时候你获取的实例只能读不能写了 最后,让我们看一下如何使用这些数据操作方法来显示数据,界面核心逻辑代码: 复制代码public class SQLiteActivity extends Activity { public DiaryDao diaryDao; //因为getWritableDatabase内部调用了mContext.openOrCreateDatabase(mName, 0, mFactory); //所以要确保context已初始化,我们可以把实例化Dao的步骤放在Activity的onCreate里 @Override protected void onCreate(Bundle savedInstanceState) { diaryDao = new DiaryDao(SQLiteActivity.this); initDatabase(); } class ViewOcl implements View.OnClickListener { @Override public void onClick(View v) { String strSQL; boolean flag; String message; switch (v.getId()) { case R.id.btnAdd: String title = txtTitle.getText().toString().trim(); String weather = txtWeather.getText().toString().trim();; String context = txtContext.getText().toString().trim();; String publish = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") .format(new Date()); // 动态组件SQL语句 strSQL = "insert into diary values(null,'" + title + "','" + weather + "','" + context + "','" + publish + "')"; flag = diaryDao.execOther(strSQL); //返回信息 message = flag?"添加成功":"添加失败"; Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show(); break; case R.id.btnDelete: strSQL = "delete from diary where tid = 1"; flag = diaryDao.execOther(strSQL); //返回信息 message = flag?"删除成功":"删除失败"; Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show(); break; case R.id.btnQuery: strSQL = "select * from diary order by publish desc"; String data = diaryDao.execQuery(strSQL); Toast.makeText(getApplicationContext(), data, Toast.LENGTH_LONG).show(); break; case R.id.btnUpdate: strSQL = "update diary set title = '测试标题1-1' where tid = 1"; flag = diaryDao.execOther(strSQL); //返回信息 message = flag?"更新成功":"更新失败"; Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show(); break; } } } private void initDatabase() { // 创建数据库对象 SqliteDBHelper sqliteDBHelper = new SqliteDBHelper(SQLiteActivity.this); sqliteDBHelper.getWritableDatabase(); System.out.println("数据库创建成功"); } }复制代码 Android sqlite3数据库管理工具 Android SDK的tools目录下提供了一个sqlite3.exe工具,这是一个简单的sqlite数据库管理工具。开发者可以方便的使用其对sqlite数据库进行命令行的操作。 程序运行生成的.db文件一般位于"/data/data/项目名(包括所处包名)/databases/.db",因此要对数据库文件进行操作需要先找到数据库文件: 1、进入shell 命令 adb shell2、找到数据库文件 cd data/data ls --列出所有项目 cd project_name --进入所需项目名 cd databases ls --列出现寸的数据库文件 3、进入数据库 sqlite3 test_db --进入所需数据库 会出现类似如下字样: SQLite version 3.6.22Enter ".help" for instructionsEnter SQL statements terminated with a ";"sqlite>至此,可对数据库进行sql操作。 4、sqlite常用命令 .databases --产看当前数据库.tables --查看当前数据库中的表.help --sqlite3帮助.schema --各个表的生成语句 原文地址https://www.cnblogs.com/ITtangtang/p/3920916.html
auto_answer 2019-12-02 01:50:21 0 浏览量 回答数 0

回答

详细解答可以参考3. 自定义样式通知(V2.3.3及以上版本开始支持)">官方帮助文档Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);
2019-12-01 23:11:48 0 浏览量 回答数 0

问题

快速入门PPAS版-常用管理函数

RDS 上 PPAS 由于没有对外开放超级用户,用户无法像线下使用 PPAS 那样使用 superuser 账号管理数据库对象。为此,我们推出了一组管理函数,帮助用户顺利使用云上的 PPAS 各种功...
李沃晟 2019-12-01 21:38:18 602 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);
2019-12-01 23:11:48 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);
2019-12-01 23:11:47 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);
2019-12-01 23:11:47 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);
2019-12-01 23:11:49 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);
2019-12-01 23:11:49 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);
2019-12-01 23:11:46 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);
2019-12-01 23:11:46 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);
2019-12-01 23:11:49 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);
2019-12-01 23:11:48 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);
2019-12-01 23:11:49 0 浏览量 回答数 0

回答

一 系统介绍 Android 是Google开发的基于Linux平台的、开源的、智能手机操作系统。Android包括操作系统、中间件和应用程序,由于源代码开放,Android可以被移植到不同的硬件平台上。 围绕在Google的Android系统中,形成了移植开发和上层应用程序开发两个不同的开发方面。手机厂商从事移植开发工作,上层的应用程序开发可以由任何单位和个人完成,开发的过程可以基于真实的硬件系统,还可以基于仿真器环境。 作为一个手机平台,Android在技术上的优势主要有以下几点: - 全开放智能手机平台 - 多硬件平台的支持 - 使用众多的标准化技术 - 核心技术完整,统一 - 完善的SDK和文档 - 完善的辅助开发工具 Android的开发者可以在完备的开发环境中进行开发,Android的官方网站也提供了丰富的文档、资料。这样有利于Android系统的开发和运行在一个良好的生态环境中。 https://developer.android.com/about安卓开发者官方网站 从宏观的角度来看,Android是一个开放的软件系统,它包含了众多的源代码。从下至上,Android系统分成4个层次: 第1层次:Linux操作系统及驱动; 第2层次:本地代码(C/C++)框架; 第3层次:Java框架; 第4层次:Java应用程序。 Android系统的架构如图所示: 由于Android系统需要支持Java代码的运行,这部分内容是Android的运行环境(Runtime),由虚拟机和Java基本类组成。 对于Android应用程序的开发,主要关注第3层次和第4层次之间的接口。 二 学习路线 基础学习——JavaSE: 基础学习扩展——JavaEE: 基础学习扩展——Linux基础: Android开发学习——基础理论:系统架构分析: Android系统从底向上一共分了4层,每一层都把底层实现封装,并暴露调用接口给上一层。 Linux内核(Linux Kernel) Android运行在linux kernel 2.6之上,但是把linux内受GNU协议约束的部分做了取代,这样在Android的程序可以用于商业目的。 Linux 内核是硬件和软件层之间的抽象层。 中间件 中间件包括两部分: 核心库和运行时(libraries & Android runtime) 核心库包括,SurfaceManager 显示系统管理库,负责把2D或3D内容显示到屏幕;Media Framework 媒体库,负责支持图像,支持多种视频和音频的录制和回放;SQlite 数据库,一个功能强大的轻量级嵌入式关系数据库;WebKit 浏览器引擎等。 Dalvik虚拟机: 区别于Java虚拟机的是,每一个Android 应用程序都在它自己的进程中运行,都有一个属于自己的Dalvik 虚拟机,这一点可以让系统在运行时可以达到优化,程序间的影响大大降低。Dalvik虚拟机并非运行Java字节码,而是运行自己的字节码。 应用程序框架(Application Framework) 丰富而又可扩展性的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids), 文本框(text boxes),按钮( buttons), 可嵌入的web 浏览器。内容提供者(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据。资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件( layoutfiles )。通知管理器(Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。 三 基础知识 掌握java部分之后,可以使用开发工具进入android世界 您可以使用 Kotlin、Java 和 C++ 语言编写 Android 应用。Android SDK 工具会将您的代码连同任何数据和资源文件编译成一个 APK(Android 软件包),即带有 .apk 后缀的归档文件。一个 APK 文件包含 Android 应用的所有内容,它也是 Android 设备用来安装应用的文件。 每个 Android 应用都处于各自的安全沙盒中,并受以下 Android 安全功能的保护: • Android 操作系统是一种多用户 Linux 系统,其中的每个应用都是一个不同的用户; • 默认情况下,系统会为每个应用分配一个唯一的 Linux 用户 ID(该 ID 仅由系统使用,应用并不知晓)。系统会为应用中的所有文件设置权限,使得只有分配给该应用的用户 ID 才能访问这些文件; • 每个进程都拥有自己的虚拟机 (VM),因此应用代码独立于其他应用而运行。 • 默认情况下,每个应用都在其自己的 Linux 进程内运行。Android 系统会在需要执行任何应用组件时启动该进程,然后当不再需要该进程或系统必须为其他应用恢复内存时,其便会关闭该进程。 Android 系统实现了最小权限原则。换言之,默认情况下,每个应用只能访问执行其工作所需的组件,而不能访问其他组件。这样便能创建非常安全的环境,在此环境中,应用无法访问其未获得权限的系统部分。不过,应用仍可通过一些途径与其他应用共享数据以及访问系统服务: • 可以安排两个应用共享同一 Linux 用户 ID,在此情况下,二者便能访问彼此的文件。为节省系统资源,也可安排拥有相同用户 ID 的应用在同一 Linux 进程中运行,并共享同一 VM。应用还必须使用相同的证书进行签名。 • 应用可以请求访问设备数据(如用户的联系人、短信消息、可装载存储装置(SD 卡)、相机、蓝牙等)的权限。用户必须明确授予这些权限。如需了解详细信息,请参阅使用系统权限。 本文档的其余部分将介绍以下概念: • 用于定义应用的核心框架组件 • 用来声明组件和应用必需设备功能的清单文件。 • 与应用代码分离并允许应用针对各种设备配置适当优化其行为的资源。 应用组件 应用组件是 Android 应用的基本构建块。每个组件都是一个入口点,系统或用户可通过该入口点进入您的应用。有些组件会依赖于其他组件。 共有四种不同的应用组件类型: • Activity • 服务 • 广播接收器 • 内容提供程序 每种类型都有不同的用途和生命周期,后者会定义如何创建和销毁组件。以下部分将介绍应用组件的四种类型。 Activity Activity 是与用户交互的入口点。它表示拥有界面的单个屏幕。例如,电子邮件应用可能有一个显示新电子邮件列表的 Activity、一个用于撰写电子邮件的 Activity 以及一个用于阅读电子邮件的 Activity。尽管这些 Activity 通过协作在电子邮件应用中形成一种紧密结合的用户体验,但每个 Activity 都独立于其他 Activity 而存在。因此,其他应用可以启动其中任何一个 Activity(如果电子邮件应用允许)。例如,相机应用可以启动电子邮件应用内用于撰写新电子邮件的 Activity,以便用户共享图片。Activity 有助于完成系统和应用程序之间的以下重要交互: • 追踪用户当前关心的内容(屏幕上显示的内容),以确保系统继续运行托管 Activity 的进程。 • 了解先前使用的进程包含用户可能返回的内容(已停止的 Activity),从而更优先保留这些进程。 • 帮助应用处理终止其进程的情况,以便用户可以返回已恢复其先前状态的 Activity。 • 提供一种途径,让应用实现彼此之间的用户流,并让系统协调这些用户流。(此处最经典的示例是共享。) 您需将 Activity 作为 Activity 类的子类来实现。如需了解有关 Activity 类的更多信息,请参阅 Activity 开发者指南。 服务 服务是一个通用入口点,用于因各种原因使应用在后台保持运行状态。它是一种在后台运行的组件,用于执行长时间运行的操作或为远程进程执行作业。服务不提供界面。例如,当用户使用其他应用时,服务可能会在后台播放音乐或通过网络获取数据,但这不会阻断用户与 Activity 的交互。诸如 Activity 等其他组件可以启动服务,使该服务运行或绑定到该服务,以便与其进行交互。事实上,有两种截然不同的语义服务可以告知系统如何管理应用:已启动服务会告知系统使其运行至工作完毕。此类工作可以是在后台同步一些数据,或者在用户离开应用后继续播放音乐。在后台同步数据或播放音乐也代表了两种不同类型的已启动服务,而这些服务可以修改系统处理它们的方式: • 音乐播放是用户可直接感知的服务,因此,应用会向用户发送通知,表明其希望成为前台,从而告诉系统此消息;在此情况下,系统明白它应尽全力维持该服务进程运行,因为进程消失会令用户感到不快。 • 通常,用户不会意识到常规后台服务正处于运行状态,因此系统可以更自由地管理其进程。如果系统需要使用 RAM 来处理用户更迫切关注的内容,则其可能允许终止服务(然后在稍后的某个时刻重启服务)。 绑定服务之所以能运行,原因是某些其他应用(或系统)已表示希望使用该服务。从根本上讲,这是为另一个进程提供 API 的服务。因此,系统会知晓这些进程之间存在依赖关系,所以如果进程 A 绑定到进程 B 中的服务,系统便知道自己需使进程 B(及其服务)为进程 A 保持运行状态。此外,如果进程 A 是用户关心的内容,系统随即也知道将进程 B 视为用户关心的内容。由于存在灵活性(无论好坏),服务已成为非常有用的构建块,并且可实现各种高级系统概念。动态壁纸、通知侦听器、屏幕保护程序、输入方法、无障碍功能服务以及众多其他核心系统功能均可构建为在其运行时由应用实现、系统绑定的服务。 您需将服务作为 Service 的子类来实现。如需了解有关 Service 类的更多信息,请参阅服务开发者指南。 注意:如果您的应用面向 Android 5.0(API 级别 21)或更高版本,请使用 JobScheduler 类来调度操作。JobScheduler 的优势在于,它能通过优化作业调度来降低功耗,以及使用 Doze API,从而达到省电目的。如需了解有关使用此类的更多信息,请参阅 JobScheduler 参考文档。 广播接收器 借助广播接收器组件,系统能够在常规用户流之外向应用传递事件,从而允许应用响应系统范围内的广播通知。由于广播接收器是另一个明确定义的应用入口,因此系统甚至可以向当前未运行的应用传递广播。例如,应用可通过调度提醒来发布通知,以告知用户即将发生的事件。而且,通过将该提醒传递给应用的广播接收器,应用在提醒响起之前即无需继续运行。 许多广播均由系统发起,例如,通知屏幕已关闭、电池电量不足或已拍摄照片的广播。应用也可发起广播,例如,通知其他应用某些数据已下载至设备,并且可供其使用。尽管广播接收器不会显示界面,但其可以创建状态栏通知,在发生广播事件时提醒用户。但广播接收器更常见的用途只是作为通向其他组件的通道,旨在执行极少量的工作。例如,它可能会根据带 JobScheduler 的事件调度 JobService 来执行某项工作 广播接收器作为 BroadcastReceiver 的子类实现,并且每条广播都作为 Intent 对象进行传递。如需了解详细信息,请参阅 BroadcastReceiver 类。 内容提供程序 内容提供程序管理一组共享的应用数据,您可以将这些数据存储在文件系统、SQLite 数据库、网络中或者您的应用可访问的任何其他持久化存储位置。其他应用可通过内容提供程序查询或修改数据(如果内容提供程序允许)。例如,Android 系统可提供管理用户联系人信息的内容提供程序。 因此,任何拥有适当权限的应用均可查询内容提供程序(如 ContactsContract.Data),以读取和写入特定人员的相关信息。我们很容易将内容提供程序看作数据库上的抽象,因为其内置的大量 API 和支持时常适用于这一情况。但从系统设计的角度看,二者的核心目的不同。对系统而言,内容提供程序是应用的入口点,用于发布由 URI 架构识别的已命名数据项。因此,应用可以决定如何将其包含的数据映射到 URI 命名空间,进而将这些 URI 分发给其他实体。反之,这些实体也可使用分发的 URI 来访问数据。在管理应用的过程中,系统可以执行以下特殊操作: • 分配 URI 无需应用保持运行状态,因此 URI 可在其所属的应用退出后继续保留。当系统必须从相应的 URI 检索应用数据时,系统只需确保所属应用仍处于运行状态。 • 这些 URI 还会提供重要的细粒度安全模型。例如,应用可将其所拥有图像的 URI 放到剪贴板上,但将其内容提供程序锁定,以便其他应用程序无法随意访问它。当第二个应用尝试访问剪贴板上的 URI 时,系统可允许该应用通过临时的 URI 授权来访问数据,这样便只能访问 URI 后面的数据,而非第二个应用中的其他任何内容。 内容提供程序也适用于读取和写入您的应用不共享的私有数据。 内容提供程序作为 ContentProvider 的子类实现,并且其必须实现一组标准 API,以便其他应用能够执行事务。如需了解详细信息,请参阅内容提供程序开发者指南。 Android 系统设计的独特之处在于,任何应用都可启动其他应用的组件。例如,当您想让用户使用设备相机拍摄照片时,另一个应用可能也可执行该操作,因而您的应用便可使用该应用,而非自行产生一个 Activity 来拍摄照片。您无需加入甚至链接到该相机应用的代码。只需启动拍摄照片的相机应用中的 Activity 即可。完成拍摄时,系统甚至会将照片返回您的应用,以便您使用。对用户而言,这就如同相机是您应用的一部分。 当系统启动某个组件时,它会启动该应用的进程(如果尚未运行),并实例化该组件所需的类。例如,如果您的应用启动相机应用中拍摄照片的 Activity,则该 Activity 会在属于相机应用的进程(而非您的应用进程)中运行。因此,与大多数其他系统上的应用不同,Android 应用并没有单个入口点(即没有 main() 函数)。 由于系统在单独的进程中运行每个应用,且其文件权限会限制对其他应用的访问,因此您的应用无法直接启动其他应用中的组件,但 Android 系统可以。如要启动其他应用中的组件,请向系统传递一条消息,说明启动特定组件的 Intent。系统随后便会为您启动该组件。 启动组件 在四种组件类型中,有三种(Activity、服务和广播接收器)均通过异步消息 Intent 进行启动。Intent 会在运行时对各个组件进行互相绑定。您可以将 Intent 视为从其他组件(无论该组件是属于您的应用还是其他应用)请求操作的信使。 您需使用 Intent 对象创建 Intent,该对象通过定义消息来启动特定组件(显式 Intent)或特定的组件类型(隐式 Intent)。 对于 Activity 和服务,Intent 会定义要执行的操作(例如,查看或发送某内容),并且可指定待操作数据的 URI,以及正在启动的组件可能需要了解的信息。例如,Intent 可能会传达对 Activity 的请求,以便显示图像或打开网页。在某些情况下,您可以通过启动 Activity 来接收结果,这样 Activity 还会返回 Intent 中的结果。例如,您可以发出一个 Intent,让用户选取某位联系人并将其返回给您。返回 Intent 包含指向所选联系人的 URI。 对于广播接收器,Intent 只会定义待广播的通知。例如,指示设备电池电量不足的广播只包含指示“电池电量不足”的已知操作字符串。 与 Activity、服务和广播接收器不同,内容提供程序并非由 Intent 启动。相反,它们会在成为 ContentResolver 的请求目标时启动。内容解析程序会通过内容提供程序处理所有直接事务,因此通过提供程序执行事务的组件便无需执行事务,而是改为在 ContentResolver 对象上调用方法。这会在内容提供程序与请求信息的组件之间留出一个抽象层(以确保安全)。 每种组件都有不同的启动方法: • 如要启动 Activity,您可以向 startActivity() 或 startActivityForResult() 传递 Intent(当您想让 Activity 返回结果时),或者为其安排新任务。 • 在 Android 5.0(API 级别 21)及更高版本中,您可以使用 JobScheduler 类来调度操作。对于早期 Android 版本,您可以通过向 startService() 传递 Intent 来启动服务(或对执行中的服务下达新指令)。您也可通过向将 bindService() 传递 Intent 来绑定到该服务。 • 您可以通过向 sendBroadcast()、sendOrderedBroadcast() 或 sendStickyBroadcast() 等方法传递 Intent 来发起广播。 • 您可以通过在 ContentResolver 上调用 query(),对内容提供程序执行查询。 如需了解有关 Intent 用法的详细信息,请参阅 Intent 和 Intent 过滤器文档。以下文档将为您详细介绍如何启动特定组件:Activity、服务、BroadcastReceiver 和内容提供程序。
问问小秘 2020-03-03 09:47:38 0 浏览量 回答数 0

回答

OSS Object Storage Service 阿里云对象存储 媒体处理服务对用户存储于OSS的媒体文件进行转码,并将转码输出文件保存在MediaBucket中或者OutputBucket中。 Bucket OSS Bucket OSS Bucket 遵守OSS Bucket定义,只能包括小写字母,数字和短横线(-),必须以小写字母或者数字开头,长度必须在3-255字节之间。 Location OSS Location OSS 数据中心 遵守OSS Location定义。 Object OSS Object OSS Object 遵守OSS Object定义,使用UTF-8编码,长度必须在1-1023字节之间,不能以“/”或者“\”字符开头。 LocalFile Local File 本地媒体文件 用户本地存储的媒体文件,还没有上传到OSS。 Input Job Input 作业输入 作业输入,包括InputFile以及其它一些转码作业输入配置参数 InputFile Input File 输入文件 本地文件上传到OSS后,就转变成一个输入文件。 Output Job Output 作业输出配置 作业输出配置由模板ID、水印列表、OutputFile、输出文件等属性构成。 OutputFile Output File 输出文件 作业输出文件,存储于OSS上,由OutputLocation、OutputBucket、OutputObject唯一标识一个输出文件。 OutputBucket Output Bucket 转码输出Bucket 用户指定的转码输出Bucket,“OSS文件转码流程”中提交作业时需要指定的参数,用户必须通过媒体处理服务的控制台资源管理页面的Bucket授权频道授予OutputBucket给媒体处理服务有写权限。 OutputLocation Output Location 转码输出Bucket所在的OSS Location 转码输出Bucket所在的数据中心,“OSS文件转码流程”中提交转码作业时可以指定的参数。 Template Transcode Template 自定义模板 自定义模板是指用户自行定义转码参数的转码模板,它是转码参数(音频、视频、容器等)的集合。每个自定义模板有一个唯一ID。 PresetTemplate Preset Transcode Template 预置模板 预置模版是媒体处理服务内置的智能转码模板,能根据输入文件的特点动态调整转码设置,从而为用户提供在一定带宽条件下的最优转码输出。由于输入文件本身有差异(分辨率、码率等),不一定所有的预置模板都适合于该输入文件。输入文件的转码使用预置模板时,需要调用“提交模板分析作业”接口(SubmitAnalysisJob)来触发模板分析;调用“查询模板分析作业”接口(QueryAnalysisJobList)来获取该输入文件可用的预置模板列表。媒体转码服务支持的预置模板详见附录 预置模板。 WaterMarkTemplate WaterMark Template 水印模板 水印包括两部分参数:水印内容为可变参数;水印位置、偏移量、大小等为相对稳定的参数;相对稳定的参数构成水印模板,每个水印模板有一个唯一的ID。 Job Transcode Job 转码作业 转码作业,一个转码作业由一路输入及一路输出构成,作业会被加入到管道中,管道中的作业会被调度引擎调度到转码系统进行转码。 AnalysisJob Analysis Job 预置模板分析作业 预置模板分析作业由输入文件及分析配置构成,分析得到可用的预置模板。 SnapshotJob Snapshot Job 截图作业 截图作业由输入文件及截图配置构成,得到输入文件按截图配置截取的图片。 MediaInfoJob MediaInfo Job 媒体信息作业 媒体信息作业需指定输入文件,得到输入文件的媒体信息。 Pipeline Job pipeline 管道 管道是一作业队列,转码作业加入到管道中,才会被媒体处理服务调度到转码执行;如果管道中作业数量过多,会排队等待。管道有激活、暂停两种状态;管道被暂停时,媒体转码服务不再调度此管道中的作业执行转码,直到管道被重新激活为止,已经在执行转码的作业不受影响。 MediaRepository Media Repository 媒体库 所有媒体的集合。 Media Media Resource 媒体 媒体是媒体库的最小管理单元。包含一个输入(视频/音频的多媒体文件)和相关的所有输出(例如,转码/截图)。由MediaId唯一标识,并且多媒体输入文件和媒体是一一对应的。 MediaWorkflow Media Workflow 媒体工作流 媒体工作流是生产媒体的工厂。从输入媒体Bucket的多媒体文件开始,执行自定义的处理流程,把处理结果存储到输出媒体Bucket。由MediaWorkflowId唯一标识。 Activity Media Workflow Activity 媒体工作流活动 媒体工作流的组成单位。媒体工作流的处理流程实际是一个有向无环的拓扑图,图中的每个节点叫活动,支持的活动有:转码、截图、元信息获取等。每个媒体工作流中的活动有唯一的名字标识。 MediaWorkflowExecution Media Workflow Execution Instance 媒体工作流执行实例 媒体工作流的每次执行叫媒体工作流执行实例。由实例执行的Id(RunId)唯一标识。 MediaBucket Media Bucket 媒体Bucket 媒体库关联多个媒体Bucket,所有媒体相关的文件都保存在媒体Bucket中。媒体Bucket又分为输入媒体bucket和输出媒体bucket,输入和输出之间不能重叠,必须是独立的OSS Bucket。 InputMediaBucket Input Media Bucket 输入媒体Bucket 在输入媒体Bucket中新增的多媒体文件,会自动加入媒体库,如果匹配了媒体工作流的输入条件,会自动触发媒体工作流的执行。 OutputMediaBucket Output Media Bucket 输出媒体Bucket 存储媒体工作流处理后的输出文件。
保持可爱mmm 2020-03-30 10:28:49 0 浏览量 回答数 0

问题

Android SDK是什么?

功能介绍 语音Android SDK提供一句话识别服务,提供将实时短语音转成文字的功能,可直接用于语音搜索类应用。 阿里云语音服务SDK(NLSClinet),是运行...
nicenelly 2019-12-01 21:28:03 1794 浏览量 回答数 0

回答

将一台ECS数据库下的mysql数据库迁移到rds的测试环境,我登陆的账号跟密码都是正确的,但是在rds控制台做迁移获取数据库列表的时候一直提示错误,可以检查一下自建mysql是否开启了root远程连接权限。 ------------------------- 目前SLS数据是1小时出一次 6小时后可以查询,数据保存3天,3天后会消除,但是用户自己可以手工导入ODPS,ODPS目前我们只提供java的SDK。对于只需要存放数据却不用做数据分析处理的用户因为用ODPS的成本相对会很高,建议用OSS。 ------------------------- RDS API连接:  http://dev.aliyun.com/read.php?spm=0.0.0.0.OSqGzU&tid=121 ------------------------- <http://help.aliyun.com/doc/list/11114453.html?spm=0.0.0.0.6grHgs>对rds有迁移需求的,客户参考这个连接 ------------------------- 回 8楼(村里一把手) 的帖子 恩,有道理~是想累积20条整理汇总一次~四不四会好点~ 因为问题总四每天都更新中滴呦 ------------------------- 能不能直接将ECS文件迁移到OSS上,有木有类似工具啥尼?用python osscmd工具如果不习惯命令行的,用ossbrowser也阔以哦~如果从一个节点转到另一个节点的业务,是需要走外网的,不能走内网呦~也可以考虑第三方帮忙~http://market.aliyun.com/product_list/13-121568002.html?spm=5176.383338.201.21.gnWwSB ------------------------- 如果没有购买带宽从一个ECS远程到另一个ECS外网是无法连接的。如果您设置了带宽,但是依旧无法访问,那请您查看下您有没有设置安全组规则(相当于系统外的防火墙)请您添加下,否则也是无法访问的。本地的电脑远程连接有公网带宽服务器,并非使用阿里云的服务器去远程新的服务器。ECS的公网ip无法ping通,这个也跟安全组规则有关,因为安全组规则设置了主机的所有网络访问权限。怎么查找防火墙? 服务器内部的防火墙规则可以在服务器内部看windows 开始--运行--输入firewall.cpl Linux使用iptables命令查看 ------------------------- SLS简单心跳显示失败,我们应如何处理?机器心跳失败的原因有可能是由于没有安装Logtail导致,目前心跳监控依赖新版的云盾。升级云盾版本连接:http://help.aliyun.com/view/11108323_13631340.html?spm=5176.7225169.1997283177.6.YnBcjT 通过web控制台使用该地址重新创建一个机器组,系统会在创建机器组的过程中自动安装Logtail,前提是系统安装了云盾新版本,服务器需要是杭州的linux os,具备公网地址,重新测试创建,一般创建后几分钟后即可部署完成。 ------------------------- RDS 5元购活动: http://promotion.aliyun.com/act/aliyun/rds/activity.html?spm=5176.383715.4.3.zuwric ------------------------- 如何复制一个数据库?我想把当前的数据库在RDS上复制一个做测试用,不知道怎么操作。如果您现在有两个以上的RDS实例,可以使用管理控制台中的将数据库迁移至其他实例功能直接进行迁移,如果您只有一个RDS实例,可以考虑将当前数据库导出,然后再导入,您可以使用binlog进行操作,然后导入的时候通过ECS使用内网导入,速度会较快的。可以用mysqldump迁移 ,innodb 用--single-transaction选项,不要带--lock-tables ------------------------- 香港服务器是不需要备案的 ------------------------- OSS直接在KEY里指定 ------------------------- ECS支持0M带宽升级,需要重启 ------------------------- 备案补偿规则(备多久送多久)补偿上限30天。 ------------------------- 月消费记录 ------------------------- 云监控需要ECS有外网环境下使用 ------------------------- 奇怪自己的CDN流量为何高?场景,做CDN测试时,把并未绑定的域名公布出去,但是流量消耗却很多,这是为什么?1.建议您可以在管理控制台的cdn里的资源监控里的访客分析里查看一下具体情况2.cdn会回源到服务器同步数据3.建议通过下载CDN 的访问日志,然后进行一下分析。4.再有异常,建议设置这个CDN防盗链功能,http://help.aliyun.com/doc/view/13513132.html?spm=5176.7114037.1996646101.9.zY2u99 ------------------------- 关于OSS 的防盗链设置请您参考http://help.aliyun.com/view/13439009.html  . ------------------------- 还在为备案在纠结吗?不用怕,看这个,每个省都不一样http://help.aliyun.com/view/13445927.html?spm=5176.386621.1.21.Iuzh9q
app客户经理 2019-12-01 23:22:16 0 浏览量 回答数 0

问题

Android SDK是什么?

功能介绍 语音Android SDK提供一句话识别服务,提供将实时短语音转成文字的功能,可直接用于语音搜索类应用。 阿里云语音服务SDK(NLSClinet),是运行...
nicenelly 2019-12-01 21:01:23 1531 浏览量 回答数 0

问题

语音合成Android SDK

功能介绍 语音Android SDK提供提供将文本转为普通话语音的语音合成功能。 阿里云语音服务SDK(NLSClinet),是运行于android平台的基础语音识别、自然语言理解和语音合成的基...
nicenelly 2019-12-01 21:01:45 1399 浏览量 回答数 0

问题

关于httppost = new HttpPost(Uri) 返回值为null! 不知道为何

RT http.java public class Http { static HttpEntity entity; //HttpEntity是可以同Http消息进行接受或发送的实体,可以是流或者字符串 st...
爵霸 2019-12-01 20:25:25 2504 浏览量 回答数 0

问题

SDK API都有什么?(4)

3. 自定义样式通知(V2.3.3及以上版本开始支持) Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式࿰...
猫饭先生 2019-12-01 21:57:17 777 浏览量 回答数 0

回答

adb介绍: Android Debug Bridge(安卓调试桥) tools。它就是一个命令行窗口,用于通过电脑端与模拟器或者是设备之间的交互。 ADB是一个C/S架构的应用程序,由三部分组成: 运行在pc端的adb client: 命令行程序”adb”用于从shell或脚本中运行adb命令。首先,“adb”程序尝试定位主机上的ADB服务器,如果找不到ADB服务器,“adb”程序自动启动一个ADB服务器。接下来,当设备的adbd和pc端的adb server建立连接后,adb client就可以向ADB servcer发送服务请求; 运行在pc端的adb server: ADB Server是运行在主机上的一个后台进程。它的作用在于检测USB端口感知设备的连接和拔除,以及模拟器实例的启动或停止,ADB Server还需要将adb client的请求通过usb或者tcp的方式发送到对应的adbd上; 运行在设备端的常驻进程adb demon (adbd): 程序“adbd”作为一个后台进程在Android设备或模拟器系统中运行。它的作用是连接ADB服务器,并且为运行在主机上的客户端提供一些服务。 adb下载及安装: 一共有两种方法: 首先第一种就是最简单的方法,只下载adb压缩包去解压即可:链接:https://pan.baidu.com/s/1SKu24yyShwg16lyIupO5VA 提取码:ih0i (备注:如果下载放入到D盘去解压,打开dos窗口那么就要进入到D盘,然后再去执行adb命令,输入adb查看它是否安装成功) 第二种方法前提是已安装了Android Studio,它本身带有adb命令,如果配置好的Android Studio 一般都是可以直接调用adb命令的;如果不行,找到adb在SDK里的绝对路径,放入环境变量path中(绝对路径不带入adb.exe) 然后输入adb version 查看版本 可以看出是否安装成功,如下就已经成功了。 启动 adb server 命令:adb start-server 停止 adb server 命令:adb kill-server 查询已连接设备/模拟器:adb devices 该命令经常出现以下问题: offline —— 表示设备未连接成功或无响应; device —— 设备已连接; no device —— 没有设备/模拟器连接; List of devices attached 设备/模拟器未连接到 adb 或无响应 USB连接: 在手机“设置”-“关于手机”连续点击“版本号”7 次,可以进入到开发者模式;然后可以到“设置”-“开发者选项”-“调试”里打开USB调试以及允许ADB的一些权限;连接时手机会弹出“允许HiSuite通过HDB连接设备”点击允许/接受即可; 驱动也是必须安装的,可以用豌豆荚,或者是手机商家提供的手机助手,点进去驱动器安装即可(部分电脑双击无法直接进入到驱动器里,可以使用右键找到进入点击即可) 再次输入adb devices验证是否连接成功,连接成功即如下图: 也可以进行无线连接,其中非root权限也需借助USB线进行操作,完成后即可断开USB线;root用户可以进行无线连接,具体步骤可以参考网上资源。 **查看是否有root权限:**输入adb shell,然后输入su KaTeX parse error: Expected 'EOF', got '#' at position 5: 如果变为#̲则成功,如果仍为则未有root权限;恢复命令:adb unroot 查看应用列表: 查看所有应用列表:adb shell pm list packages 查看系统应用列表:adb shell pm list packages -s 查看第三方应用列表:adb shell pm list packages -3: 安装apk:adb install “-lrtsdg” “path_to_apk” “-lrtsdg”: -l:将应用安装到保护目录 /mnt/asec; -r:允许覆盖安装; -t:允许安装 AndroidManifest.xml 里 application 指定 android:testOnly=“true” 的应用; -s:将应用安装到 sdcard; -d:允许降级覆盖安装; -g:授予所有运行时权限; path_to_apk:apk的绝对路径。 示例安装淘宝apk:adb install -l /data/local/tmp/taobao.apk 卸载apk:adb uninstall -k “packagename” “packagename”:表示应用的包名,以下相同; -k 参数可选,表示卸载应用但保留数据和缓存目录。 示例卸载 手机淘宝:adb uninstall com.taobao.taobao 清除应用数据与缓存命令:adb shell pm clear “packagename” 相当于在设置里的应用信息界面点击「清除缓存」和「清除数据」。 示例:adb shell pm clear com.taobao.taobao 表示清除 手机淘宝数据和缓存。 Android四大组件有Activity,Service服务,Content Provider内容提供,BroadcastReceiver广播接收器,具体不做多讲,常用的有以下: 查看前台 Activity命令:adb shell dumpsys activity activities | grep mFocusedActivity 查看正在运行的 Services命令:adb shell dumpsys activity services “packagename” 其中参数不是必须的,指定 “packagename” 表示查看与某个包名相关的 Services,不指定表示查看所有 Services。 查看应用详细信息命令:adb shell dumpsys package “packagename” 调起 Activity命令格式:adb shell am start [options] 例如:adb shell am start -n com.tencent.mm/.ui.LauncherUI表示调起微信主界面 调起 Service命令格式:adb shell am startservice [options] 例如:adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService 表示调起微信的某 Service。 强制停止应用命令:adb shell am force-stop “packagename” 例如强制停止淘宝:adb shell am force-stop com.taobao.taobao 模拟按键/输入:adb shell input keyevent keycode 不同的 keycode有不同的功能: keycode 含义 3 HOME 键 4 返回键 5 打开拨号应用 6 挂断电话 26 电源键 27 拍照(需要在相机应用里) 61 Tab键 64 打开浏览器 67 退格键 80 拍照对焦键 82 菜单键 85 播放/暂停 86 停止播放 92 向上翻页键 93 向下翻页键 111 ESC键 112 删除键 122 移动光标到行首或列表顶部 123 移动光标到行末或列表底部 124 插入键 164 静音 176 打开系统设置 207 打开联系人 208 打开日历 209 打开音乐 220 降低屏幕亮度 221 提高屏幕亮度 223 系统休眠 224 点亮屏幕 224 点亮屏幕 224 点亮屏幕 231 打开语音助手 276 如果没有 wakelock 则让系统休眠 滑动解锁:如果锁屏没有密码,是通过滑动手势解锁,那么可以通过 input swipe 来解锁。 命令:adb shell input swipe 300 1000 300 500 (其中参数 300 1000 300 500 分别表示起始点x坐标 起始点y坐标 结束点x坐标 结束点y坐标。) 输入文本:在焦点处于某文本框时,可以通过 input 命令来输入文本。 命令:adb shell input text *** (***即为输入内容) 打印日志: Android 的日志分为如下几个优先级(priority): V —— Verbose(最低,输出得最多) D —— Debug I —— Info W —— Warning E —— Error F—— Fatal S —— Silent(最高,啥也不输出) 按某级别过滤日志则会将该级别及以上的日志输出。 比如,命令:adb logcat *:W 会将 Warning、Error、Fatal 和 Silent 日志输出。 (注: 在 macOS 下需要给 :W 这样以 作为 tag 的参数加双引号,如 adb logcat “:W”,不然会报错 no matches found: :W。) adb logcat 打印当前设备上所有日志 adb logcat :W 过滤打印严重级别W及以上的日志 adb logcat l findstr ***> F:\log.txt 把仅含的日志保存到F盘的log.txt文件中 adb logcat -c 清除屏幕上的日志记录 adb logcat -c && adb logcat -s ActivityManager l grep "Displayed” 客户端程序启动时间获取日志 adb logcat > F:\log.txt 打印当前设备上所有日志保存到F盘的log.txt文件中 adb logcat l findstr *** 打印过滤仅含的日志 adb logcat l findstr ***> F:\log.txt 把仅含**的日志保存到F盘的log.txt文件中 按 tag 和级别过滤日志:命令:adb logcat ActivityManager:I MyApp:D *:S 表示输出 tag ActivityManager 的 Info 以上级别日志,输出 tag MyApp 的 Debug 以上级别日志,及其它 tag 的 Silent 级别日志(即屏蔽其它 tag 日志)。 日志格式可以用:adb logcat -v 选项指定日志输出格式。 日志支持按以下几种 :默认格式brief、process、tag、raw、time、long 指定格式可与上面的过滤同时使用。比如:adb logcat -v long ActivityManager:I *:S 清空日志:adb logcat -c 内核日志:adb shell dmesg 查看设备情况: 查看设备信息型号命令:adb shell getprop ro.product.model 电池状况命令:adb shell dumpsys battery 屏幕分辨率命令:adb shell wm size 如果使用命令修改过,那输出可能是: Physical size: 1080x1920 Override size: 480x1024 表明设备的屏幕分辨率原本是 1080px * 1920px,当前被修改为 480px * 1024px。 屏幕密度命令:adb shell wm density 如果使用命令修改过,那输出可能是: Physical density: 480 Override density: 160 表明设备的屏幕密度原来是 480dpi,当前被修改为 160dpi。 显示屏参数:adb shell dumpsys window displays 输出示例: WINDOW MANAGER DISPLAY CONTENTS (dumpsys window displays) Display: mDisplayId=0 init=1080x1920 420dpi cur=1080x1920 app=1080x1794 rng=1080x1017-1810x1731 deferred=false layoutNeeded=false 其中 mDisplayId 为 显示屏编号,init 是初始分辨率和屏幕密度,app 的高度比 init 里的要小,表示屏幕底部有虚拟按键,高度为 1920 - 1794 = 126px 合 42dp。 android_id查看命令:adb shell settings get secure android_id 查看Android 系统版本:adb shell getprop ro.build.version.release 查看设备ip地址:adb shell ifconfig | grep Mask或者adb shell netcfg 查看CPU 信息命令:adb shell cat /proc/cpuinfo 查看内存信息命令:adb shell cat /proc/meminfo 更多硬件与系统属性: 设备的更多硬件与系统属性可以通过如下命令查看:adb shell cat /system/build.prop 单独查看某一硬件或系统属性:adb shell getprop <属性名> 属性名 含义 ro.build.version.sdk SDK 版本 ro.build.version.release Android 系统版本 ro.product.model 型号 ro.product.brand 品牌 ro.product.name 设备名 ro.product.board 处理器型号 persist.sys.isUsbOtgEnabled 是否支持 OTG dalvik.vm.heapsize 每个应用程序的内存上限 ro.sf.lcd_density 屏幕密度 rro.build.version.security_patch Android 安全补丁程序级别 修改设置: 修改设置之后,运行恢复命令有可能显示仍然不太正常,可以运行 adb reboot 重启设备,或手动重启。 修改设置的原理主要是通过 settings 命令修改 /data/data/com.android.providers.settings/databases/settings.db 里存放的设置值。 修改分辨率命令:adb shell wm size 480x1024 恢复原分辨率命令:adb shell wm size reset 修改屏幕密度命令:adb shell wm density 160 表示将屏幕密度修改为 160dpi;恢复原屏幕密度命令:adb shell wm density reset 修改显示区域命令:adb shell wm overscan 0,0,0,200 四个数字分别表示距离左、上、右、下边缘的留白像素,以上命令表示将屏幕底部 200px 留白。恢复原显示区域命令:adb shell wm overscan reset 关闭 USB 调试模式命令:adb shell settings put global adb_enabled 0 需要手动恢复:「设置」-「开发者选项」-「Android 调试」 状态栏和导航栏的显示隐藏:adb shell settings put global policy_control 可由如下几种键及其对应的值组成,格式为 =:=。 key 含义 immersive.full 同时隐藏 immersive.status 隐藏状态栏 immersive.navigation 隐藏导航栏 immersive.preconfirms ? 这些键对应的值可则如下值用逗号组合: value 含义 apps 所有应用 * 所有界面 packagename 指定应用 -packagename 排除指定应用 举例:adb shell settings put global policy_control immersive.full=* 表示设置在所有界面下都同时隐藏状态栏和导航栏。 举例:adb shell settings put global policy_control immersive.status=com.package1,com.package2:immersive.navigation=apps,-com.package3 表示设置在包名为 com.package1 和 com.package2 的应用里隐藏状态栏,在除了包名为 com.package3 的所有应用里隐藏导航栏。 恢复正常模式:adb shell settings put global policy_control null 实用功能: 截图保存到电脑:adb exec-out screencap -p > sc.png 然后将 png 文件导出到电脑:adb pull /sdcard/sc.png 录制屏幕:录制屏幕以 mp4 格式保存到 /sdcard:adb shell screenrecord /sdcard/filename.mp4 需要停止时按 Ctrl-C,默认录制时间和最长录制时间都是 180 秒。 如果需要导出到电脑:adb pull /sdcard/filename.mp4 挂载、查看连接过的 WiFi 密码、开启/关闭 WiFi、设置系统日期和时间都需要root权限,不做多说。 使用 Monkey 进行压力测试:Monkey 可以生成伪随机用户事件来模拟单击、触摸、手势等操作,可以对正在开发中的程序进行随机压力测试。 简单用法:adb shell monkey -p < packagename > -v 500 表示向 指定的应用程序发送 500 个伪随机事件。 查看进程:adb shell ps 查看实时资源占用情况:adb shell top 查看进程 UID:adb shell dumpsys package | grep userId=
问问小秘 2020-04-29 15:55:55 0 浏览量 回答数 0

问题

常用管理函数

RDS 上 PPAS 由于没有对外开放超级用户,用户无法像线下使用 PPAS 那样使用 superuser 账号管理数据库对象。为此,我们推出了一组管理函数,帮助用户顺利使用云上的 PPAS 各种功...
云栖大讲堂 2019-12-01 21:37:49 966 浏览量 回答数 0
阿里云企业服务平台 陈四清的老板信息查询 上海奇点人才服务相关的云产品 爱迪商标注册信息 安徽华轩堂药业的公司信息查询 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 天籁阁商标注册信息 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 北京芙蓉天下的公司信息查询