推送实践

极光推送介绍

极光推送自动集成

官方 Android SDK 集成指南

集成实践详细步骤

注册极光账号 并配置Android 程序包名

配置了jcenter支持

buildscript {
    repositories {
        jcenter()
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

集成依赖

android {
    defaultConfig {
        applicationId "com.xxx.xxx" //JPush上注册的包名.
        ndk {
            //选择要添加的对应cpu类型的.so库。
            abiFilters 'armeabi', 'armeabi-v7a', 'armeabi-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.0.0'  // 此处以JPush 3.0.0 版本为例。
    compile 'cn.jiguang.sdk:jcore:1.0.0'  // 此处以JCore 1.0.0 版本为例。
}

Manifest自定义广播设置

        <!-- ************************************* -->
        <!--      The begin setting of JPush       -->
        <!-- ************************************* -->
        <!-- User defined. 用户自定义的广播接收器-->
        <receiver
            android:name=".broadcast.JPushReceive"
            android:enabled="true">
            <intent-filter>
                <!--Required 用户注册SDK的intent-->
                <action android:name="cn.jpush.android.intent.REGISTRATION" />
                <!--Required 用户接收SDK消息的intent-->
                <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
                <!--Required 用户接收SDK通知栏信息的intent-->
                <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
                <!--Required 用户打开自定义通知栏的intent-->
                <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
                <!-- 接收网络变化 连接/断开 since 1.6.3 -->
                <action android:name="cn.jpush.android.intent.CONNECTION" />
                <category android:name="${JPUSH_PKGNAME}" />
            </intent-filter>
        </receiver>
        <!-- ************************************* -->
        <!--      The end setting of JPush         -->
        <!-- ************************************* -->

自定义广播接收器

官方Demo代码 JPushReceive.java

初始化

public class ExampleApplication extends Application {
@Override
    public void onCreate() {
        super.onCreate();
        JPushInterface.setDebugMode(true);
        JPushInterface.init(this);
    }
}

测试API集成是否成功

  • 启动应用程序,出现如下日志,说明SDK运行正常
    [JPushInterface] action:init - sdkVersion:3.0.0, buildId:319
    pushcore I/JIGUANG-JCore: [ConnectingHelper] Login succeed 
  • 运行App,到控制台发送测试推送
  • 【重点-填坑】如果没有收到推送重启手机, 日志会打印某些jni调用的代码未找到;
  • 经验集成SDK,配置完成后需等待一段时间,功能才会见效;

进价

别名与标签

把绑定关系保存到 JPush 服务器端

  • 使用案例: 动态标签 根据角色和地域等相关的信息动态设置标签和别名,从而区分收到推送的客户;
    相关方法
    JPushInterface.setAlias(Context context,String alias, TagAliasCallback CallBack);
    JPushInterface.setTags(Context ctx,Set<String> tags, TagAliasCallback CallBack);
    JPushInterface.setAliasAndTags(getApplicationContext(), null, (Set<String>) msg.obj, mTagsCallback);

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

RegistrationID

把绑定关系保存到开发者应用服务器中

客户端设置通知栏样式

铃声、震动
显示图标
替换默认的通知栏样式。

自定义通知栏样式

    /**
     * 设置通知提示方式 - 基础属性
     */
    private void setStyleBasic() {
        BasicPushNotificationBuilder builder = new BasicPushNotificationBuilder(PushSetActivity.this);
        builder.statusBarDrawable = R.drawable.ic_launcher;
        builder.notificationFlags = Notification.FLAG_AUTO_CANCEL;  //设置为点击后自动消失
        builder.notificationDefaults = Notification.DEFAULT_SOUND;  //设置为铃声( Notification.DEFAULT_SOUND)或者震动( Notification.DEFAULT_VIBRATE)
        JPushInterface.setPushNotificationBuilder(1, builder);
        Toast.makeText(PushSetActivity.this, "Basic Builder - 1", Toast.LENGTH_SHORT).show();
    }


    /**
     * 设置通知栏样式 - 定义通知栏Layout
     */
    private void setStyleCustom() {
        CustomPushNotificationBuilder builder = new CustomPushNotificationBuilder(PushSetActivity.this, R.layout.customer_notitfication_layout, R.id.icon, R.id.title, R.id.text);
        builder.layoutIconDrawable = R.drawable.ic_launcher;
        builder.developerArg0 = "developerArg2";
        JPushInterface.setPushNotificationBuilder(2, builder);
        Toast.makeText(PushSetActivity.this, "Custom Builder - 2", Toast.LENGTH_SHORT).show();
    }


    private void setAddActionsStyle() {
        MultiActionsNotificationBuilder builder = new MultiActionsNotificationBuilder(PushSetActivity.this);
        builder.addJPushAction(R.drawable.jpush_ic_richpush_actionbar_back, "first", "my_extra1");
        builder.addJPushAction(R.drawable.jpush_ic_richpush_actionbar_back, "second", "my_extra2");
        builder.addJPushAction(R.drawable.jpush_ic_richpush_actionbar_back, "third", "my_extra3");
        JPushInterface.setPushNotificationBuilder(10, builder);

        Toast.makeText(PushSetActivity.this, "AddActions Builder - 10", Toast.LENGTH_SHORT).show();
    }

错误处理

gradle.properties 增加 android.useDeprecatedNdk=true 使用旧版本的ndk集成方式,不添加会报错:

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