美文网首页
Android个推快速集成

Android个推快速集成

作者: Silen_ | 来源:发表于2018-12-05 21:21 被阅读0次

    个推真是个磨人的小妖精啊...啊.....

    个推官网:个推官网

    android文档:android 个推文档

    推送的Json串中带url时踩过的坑:JsonObject解析url报Method threw 'org.json.JSONException' exception.

    1、创建个推应用

    登录 http://dev.getui.com ,选择登记应用并填写应用名称和包名信息,完成应用创建
    image image

    点击应用配置,获取到相应的AppID、AppKey、AppSecret信息:

    image

    2、配置依赖

    添加Maven库地址

    在以项目名为命名的顶层build.gradle文件中,添加个推maven库地址,如下所示:

    //Maven URL地址
    maven {
        url "http://mvn.gt.igexin.com/nexus/content/repositories/releases/"
    }
    
    在app/build.gradle文件中引用个推SDK依赖库,如下图所示:
    dependencies {
     implementation 'com.getui:sdk:2.12.5.0'
    }
    

    在app/build.gradle文件中的android.defaultConfig下指定所需的 CPU 架构:

    android {
      ...
      defaultConfig {
        ...
        ndk {
          abiFilters "armeabi", "armeabi-v7a", "x86_64"
        }
      }
    }
    
    配置个推应用参数

    在app/build.gradle文件中的android.defaultConfig下添加manifestPlaceholders,配置个推相关的应用参数:

    manifestPlaceholders = [
        GETUI_APP_ID : "APP_ID",
        GETUI_APP_KEY : "APP_KEY",
        GETUI_APP_SECRET : "APP_SECRET"
    ]
    

    请根据在后台创建应用获取到的应用参数进行相应替换APP_ID、APP_KEY、APP_SECRET的值

    适配Android P

    Android9.0以上默认不支持http通信,为保证SDK正常使用
    请在application节点下新增该属性

    <application android:usesCleartextTraffic="true">
    

    3、添加权限声明

    
    <uses-permission android:name="android.permission.INTERNET" />
    
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
    <uses-permission android:name="android.permission.VIBRATE" />
    
    <uses-permission android:name="android.permission.GET_TASKS" />
    
    <!-- 支持iBeancon 需要蓝牙权限 -->
    
    <uses-permission android:name="android.permission.BLUETOOTH" />
    
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    
    <!-- 支持个推3.0 电子围栏功能 -->
    
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    
    <!-- 浮动通知权限 -->
    
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    
    <!-- 自定义权限 -->
    
    <uses-permission android:name="getui.permission.GetuiService.${applicationId}" />
    
    <permission
    
        android:name="getui.permission.GetuiService.${applicationId}"
    
        android:protectionLevel="normal" >
    
    </permission>
    
    <!-- 个推SDK权限配置结束 -->
    

    4、导入通知栏图标

    为了修改默认的通知图标以及通知栏顶部提示小图标,请在资源目录的res/drawable-ldpi/、res/drawable-mdpi/、res/drawable-hdpi/、res/drawable-xhdpi/、res/drawable-xxhdpi/等各分辨率目录下,放置相应尺寸的文件名为push.png和push_small.png图片

    建议的push.png图片尺寸如下 :(但是我好像没遵守也行)

    ldpi:4848
    mdpi:64
    64
    hdpi:9696
    xhdpi:128
    128
    xxhdpi:192*192

    建议的push_small.png图片尺寸如下:(但是我好像没遵守也行)

    ldpi:1818
    mdpi:24
    24
    hdpi:3636
    xhdpi:48
    48
    xxhdpi:7272
    xxxhdp:96
    96

    5、 接收推送服务事件

    在 接收推送服务事件项目源码中添加一个继承自com.igexin.sdk.GTIntentService的类,用于接收CID、透传消息以及其他推送服务事件。请参考下列代码实现各个事件回调方法:

    public void onReceiveMessageData(Context context, GTTransmitMessage msg)是透传消息的处理

    通知推送时下面有个高级设置,这个里面的透传消息可以在那里设置,如果后端使用的NotificationTemplate模板,那么点击后才会回调此方法,在这个里面可以 进行消息处理并进行分发跳转, 可以用EventBus传递到所有界面透传消息也会传到这个方法里面,绑定别名推送不分IOS还是android,android会直接走到这个里面,会导致自动跳转,透传的message中可以写一个type,标记是android还是IOS,客户端进行判处理(我是这样解决的)

    package com.getui.demo;
    
    import android.content.Context;
    import android.os.Message;
    import android.util.Log;
    
    import com.igexin.sdk.GTIntentService;
    import com.igexin.sdk.PushConsts;
    import com.igexin.sdk.PushManager;
    import com.igexin.sdk.message.FeedbackCmdMessage;
    import com.igexin.sdk.message.GTCmdMessage;
    import com.igexin.sdk.message.GTTransmitMessage;
    import com.igexin.sdk.message.SetTagCmdMessage;
    
    import org.json.JSONObject;
    
    /**
     * 继承 GTIntentService 接收来自个推的消息, 所有消息在线程中回调,
     * 如果注册了该服务, 则务必要在 AndroidManifest中声明, 否则无法接受消息<br>
     * <p>
     * onReceiveMessageData 处理透传消息<br>
     * <p>
     * onReceiveClientId 接收 cid <br>
     * <p>
     * onReceiveOnlineState cid 离线上线通知 <br>
     * <p>
     * onReceiveCommandResult 各种事件处理回执 <br>
     */
    public class IntentService extends GTIntentService {
    
        public DemoIntentService() {
    
        }
    
        @Override
        public void onReceiveServicePid(Context context, int pid) {
    
        }
    
    
        @Override
        public void onReceiveMessageData(Context context, GTTransmitMessage msg) {
            byte[] payload = msg.getPayload();
            String message = new String(payload);
            Log.i(TAG, "onReceiveMessageData: " + message);
            try {
                JSONObject json = new JSONObject(message);
                String pushType = json.getString("PHONE_TYPE");
                if ("ANDROID".equals(pushType)) {
                    //new UsuallyEvent(message, UsuallyEvent.PUSH)是自己写的Event
                    EventBus.getDefault().post(new UsuallyEvent(message, UsuallyEvent.PUSH));
                }
            } catch (Exception e) {
                Log.e(TAG, e.toString());
            }
    
        }
    
        @Override
        public void onReceiveClientId(Context context, String clientid) {
    
            Log.e(TAG, "onReceiveClientId -> " + "clientid = " + clientid);
    
        }
    
        @Override
        public void onReceiveOnlineState(Context context, boolean online) {
    
        }
    
        @Override
        public void onReceiveCommandResult(Context context, GTCmdMessage cmdMessage) {
    
        }
    
        @Override
        public void onNotificationMessageArrived(Context context, GTNotificationMessage msg) {
    
        }
    
        @Override
        public void onNotificationMessageClicked(Context context, GTNotificationMessage msg) {
    
        }
    
    }
    

    在AndroidManifest.xml中配置上述 IntentService 类:

    <service android:name="com.getui.demo.IntentService"/>
    

    6、 初始化SDK并注册com.getui.demo.IntentService

    PushManager.getInstance().initialize(this.getApplicationContext(),PushService.class);
    // com.getui.demo.IntentService 为第三方自定义的推送服务事件接收类
    PushManager.getInstance().registerPushIntentService(this.getApplicationContext(), com.getui.demo.IntentService.class);
    
    

    7、测试

    连接手机或启动Android模拟器,编译运行你的工程,查看logcat信息。在搜索框中输入clientid,如果能显示clientid is xxx日志,则说明个推SDK已经成功运行起来了,去后台推送就行了:


    image

    相关文章

      网友评论

          本文标题:Android个推快速集成

          本文链接:https://www.haomeiwen.com/subject/alhgcqtx.html