无标题文章

极光推送(JPush Android SDK)

Author:HarleyLast update:2018/5/17

1.接入前准备工作

1.1登录进入管理控制台,创建应用程序,得到Appkey

1.2设置应用包名

2.SDk自动集成步骤

2.1在 module 的 gradle 中添加依赖和AndroidManifest的替换变量。

android {


     defaultConfig {

         applicationId "com.xxx.xxx" //JPush上注册的包名.

         ndk {

             //选择要添加的对应cpu类型的.so库。

             abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'

             // 还可以添加 'x86', 'x86_64', 'mips', 'mips64'

         }

         manifestPlaceholders = [

         JPUSH_PKGNAME : applicationId,

         JPUSH_APPKEY : "你的appkey", //JPush上注册的包名对应的appkey.

         JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.

         ]

  }

     }

     dependencies {

     compile 'cn.jiguang.sdk:jpush:3.1.1'  // 此处以JPush 3.1.1 版本为例。

     compile 'cn.jiguang.sdk:jcore:1.1.9'  // 此处以JCore 1.1.9 版本为例。

     }

: 如果在添加以上 abiFilter 配置之后android Studio出现以下提示:

NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin

则在 Project 根目录的gradle.properties文件中添加:

android.useDeprecatedNdk=true

2.2AndroidManifest 示例

package添加您的应用包名

package="您应用的包名">

添加权限:



3添加代码混淆规则

在应用工程的proguard-project.txt里添加以下代码混淆规则:

-dontoptimize

-dontpreverify

-dontwarn cn.jpush.**

-keep class cn.jpush.** { *; }

-keep class * extends cn.jpush.android.helpers.JPushMessageReceiver    { *; }

-dontwarn cn.jiguang.**

-keep class cn.jiguang.** { *; }

4添加代码

4.1init初始化SDK

示例代码:

public class ExampleApplication extends Application {

@Override

public void onCreate() {

   super.onCreate();

   JPushInterface.setDebugMode(true);

   JPushInterface.init(this);

}}

4.2接收推送消息Receiver

public class MyReceiver extends BroadcastReceiver {

private static final String TAG = "MyReceiver";

private NotificationManager nm;

@Override

public void onReceive(Context context, Intent intent) {

   if (null == nm) {

       nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

   }


   Bundle bundle = intent.getExtras();

   Logger.d(TAG, "onReceive - " + intent.getAction() + ", extras: " + AndroidUtil.printBundle(bundle));


   if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {

       Logger.d(TAG, "JPush用户注册成功");


   } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {

       Logger.d(TAG, "接受到推送下来的自定义消息");


   } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {

       Logger.d(TAG, "接受到推送下来的通知");


       receivingNotification(context,bundle);

   } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {

       Logger.d(TAG, "用户点击打开了通知");


      openNotification(context,bundle);

   } else {

       Logger.d(TAG, "Unhandled intent - " + intent.getAction());

   }

}

}

4.3Intent 参数说明

private void processCustomMessage(Context context, Bundle bundle) {

    String title = bundle.getString(JPushInterface.EXTRA_TITLE);//推送下来的通知的标题。

    String message = bundle.getString(JPushInterface.EXTRA_MESSAGE);//推送下来的通知内容。

    if (StringUtils.isEmpty(title)) {

        Logger.w(TAG, "Unexpected: empty title (friend). Give up");

        return;

    }

}

JPushInterface.EXTRA_NOTIFICATION_TITLE

保存服务器推送下来的通知的标题。

JPushInterface.EXTRA_ALERT

保存服务器推送下来的通知内容。

JPushInterface.EXTRA_EXTRA

保存服务器推送下来的附加字段。这是个 JSON 字符串。

对应 API 消息内容的 extras 字段。

JPushInterface.EXTRA_NOTIFICATION_ID

通知栏的Notification ID,可以用于清除Notification

JPushInterface.EXTRA_MSG_ID

唯一标识调整消息的 ID, 可用于上报统计等。

5.0通知 vs 自定义消息(两者的区别)

1.通知(Notification),指在手机的通知栏(状态栏)上会显示的一条通知信息。

通知主要用于提示用户。一条通知,简单的填写纯文本的通知内容即可。

2.自定义消息不是通知,默认不会被SDK展示到通知栏上,极光推送仅负责透传给SDK。其内容和展示形式完全由开发者自己定义。

自定义消息主要用于应用的内部业务逻辑和特殊展示需求。

6.0使用别名

为安装了应用程序的用户,取个别名来标识。以后给该用户 Push 消息时,就可以用此别名来指定。

调用此 API 来设置别名:

public static void setAlias(Context context, int sequence, String alias);

调用此 API 来查询别名:

public static void getAlias(Context context,int sequence);

调用此 API 来删除别名:

public static void deleteAlias(Context context,int sequence);

温馨提示:设置标签别名请注意处理call back结果。只有设置成功, 才可以向目标推送。否则服务器 API 会返回1011错误。

7.0使用标签

用于给某一群人推送消息。

标签类似于博客里为文章打上 tag ,即为某资源分类。

调用此 API 来新增标签:

public static void addTags(Context context, int sequence,Set tags);

调用此 API 来删除指定标签:

public static void deleteTags(Context context, int sequence,Set tags);

调用此 API 来清除所有标签:

public static void cleanTags(Context context, int sequence);

调用此 API 来查询所有标签:

public static void getAllTags(Context context, int sequence);

调用此 API 来查询指定tag与当前用户绑定的状态:

public static void checkTagBindState(Context context,int sequence,String tag);

8.0停止与恢复推送服务 API:

停止推送服务:

public static void stopPush(Context context);

恢复推送服务:

public static void resumePush(Context context);

注:用户登录成功时,设置推送别名和调用恢复推送服务API。退出时,设置别名为空和停止推送服务

示例代码:

JPushInterface.resumePush(mContext);//调用恢复推送服务API

JPushInterface.setAlias(mContext, userBean.getId(), new TagAliasCallback() {// 设置推送别名

@Override

public void gotResult(int i, String s, Set set) {


    }

});

9.0自定义通知栏样式设计:

        NotificationCompat.Builder builder = new NotificationCompat.Builder(context);

        //通知栏显示内容

        builder.setTicker(TextUtils.isEmpty(title) ? "自定义极光推送" : title);

        //通知消息下拉是显示的文本内容

        builder.setContentText(TextUtils.isEmpty(content) ? title : content);

        //通知栏消息下拉时显示的标题

        builder.setContentTitle(TextUtils.isEmpty(title) ? "自定义极光推送" : title);

        //接收到通知时,按手机的默认设置进行处理,声音,震动,灯

        builder.setDefaults(Notification.DEFAULT_ALL);

        //通知栏显示图标

        builder.setSmallIcon(R.mipmap.ic_launcher);

        builder.setLargeIcon(BitmapUtil.decodeBitmap(context, R.mipmap.ic_launcher, 72, 72));//todo  内存溢出

        builder.setContentIntent(pendingIntent);

        Notification notification = builder.build();

        //点击跳转后消失

        notification.flags |= Notification.FLAG_AUTO_CANCEL;

        int notifyId = (int) System.currentTimeMillis();

        NotificationManager manager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);

        manager.notify(notifyId, notification);

9.0  三分钟Demo

https://docs.jiguang.cn/jpush/client/Android/android_3m/

你可能感兴趣的:(无标题文章)