本客服平台由提供产品服务

Android通知推送

诸葛君发表于:2015年11月10日 14:51:55更新于:2016年07月08日 12:44:52

现在,您可以在我们的网站上使用其余推送平台的推送功能,目前支持友盟、个推、小米的推送服务。在集成第三方通知推送之前,您需要按照其他推送平台的文档,集成好推送功能,然后需要根据不同的平台,设置不同的第三方推送。 然后,按照以下步骤,在诸葛io内完成推送设置。

申请App Key

集成推送之前,您首先需要到诸葛网站注册并且添加新应用,添加成功后,会自动获得AppKey。

将zhuge添加到工程

Android Studio

在Module的build.gradle文件中添加:

    dependencies {         
        compile 'com.zhuge.analysis:zhugeio:latest.integration'    
    }

重新build工程即可。

使用ADT

直接将zhugesdk_version.jar拖入到工程的libs目录下,重新build工程。

添加应用权限

因为SDK会用到一些本地的服务所以需要开启权限, 在项目的AndroidManifest.xml文件的manifest节点下加入以下代码:

   <!--需要网络权限-->    
   <uses-permission         
           android:name="android.permission.INTERNET" />    
   <!--需要获取网络状态-->    
   <uses-permission            
           android:name="android.permission.ACCESS_NETWORK_STATE"/ >    
   <uses-permission         
           android:name="android.permission.ACCESS_WIFI_STATE"/>    
   <!--获取设备唯一标识-->    
   <uses-permission         
           android:name="android.permission.READ_PHONE_STATE"/>    
   <!--获取访问用户账户名的权限,用以精准匹配标签(可选)-->    
   <uses-permission android:name="android.permission.GET_ACCOUNTS"/>

开始调用

初始化SDK

在AndroidManifest.xml文件的application下为应用配置申请的AppKey和渠道名称

    <meta-data android:value="填写您在诸葛申请的AppKey" android:name="ZHUGE_APPKEY"/>    
    <meta-data android:value="自定义您的渠道名称(如wandoujia)" android:name="ZHUGE_CHANNEL" />

为了确保准确统计,请在每个Activity的onResume方法中添加以下代码:

    //初始化分析跟踪   
    ZhugeSDK.getInstance().init(getApplicationContext());

设置第三方推送

设置第三方推送,请根据平台的不同,在合适的位置调用接口:

    ZhugeSDK.getInstance().setThirdPartyPushUserId(PushChannel channel, String userId)

PushChannel是ZhugeSDK中的一个枚举类,对应不同的平台。 userID是不同的平台给设备分配的ID,需要这个才能给每一个用户push消息,对于不同的平台,名称不一样。 在调用接口之前,请务必确认已经初始化诸葛分析的SDK.

友盟

启动友盟推送时,使用带有回调的接口,将获取到的ID传给我们:

PushAgent mPushAgent = PushAgent.getInstance(this.getApplicationContext());
mPushAgent.enable(new IUmengRegisterCallback() {    
        @Override    
        public void onRegistered(final String registrationId) {        
                new Handler().post(new Runnable() {            
                    @Override            
                    public void run() {                
                    //onRegistered方法的参数registrationId即是device_token                
                    Log.d("device_token","成功获取 :\n"+ registrationId);                    
                     ZhugeSDK.getInstance().setThirdPartyPushUserId(
                                        ZhugeSDK.PushChannel.UMENG,registrationId);                    
                     }        
         });    
 }});

百度

百度推送在绑定成功之后即会返回一个channelId。 最新版的百度推送更新了用于接收推送的BroadcastReceiver,请在继承自PushMessageReceiver(v4.5.1之前是FrontiaPushMessageReceiver)的Receiver中将OnBind(context,errorCode,appid,userId,channelId,requestId)方法中的第五个参数channelId传递进来

    public void onBind(Context context, int errorCode, String appid,
            String userId, String channelId, String requestId) {
            ZhugeSDK.getInstance().setThirdPartyPushUserId( 
               ZhugeSDK.PushChannel.BAIDU,channelId);      
     }

个推

对于个推,在个推成功初始化之后,即可得到UserId,示例代码如下

    String clientID = PushManager.getInstance().getClientid(getApplicationContext());          
    ZhugeSDK.getInstance().setThirdPartyPushUserId(
                            ZhugeSDK.PushChannel.GETUI,clientID);

信鸽

信鸽开发指南里有获取Token的几种方式,具体可以参看信鸽的内容。以下是其中一种方式的示例:

    String token = XGPushConfig.getToken(context);    
    ZhugeSDK.getInstance().setThirdPartyPushUserId(
                           ZhugeSDK.PushChannel.XINGE,token);

极光

极光在初始化成功之后,会返回给客户端一个RegistrationID。可在成功之后获取这个ID

    String id = JPushInterface.getRegistrationID(this);     
    ZhugeSDK.getInstance().setThirdPartyPushUserId(
                           ZhugeSDK.PushChannel.JPUSH,id);

小米

在您自定义的继承自PushMessageReceiver类的BroadcastReceiver中,onCommandResult方法可以得到userId,小米称之为registerId。示例如下:

    public void onCommandResult(Context context,
                                MiPushCommandMessage message) {        
        String command = message.getCommand();        
        List<String> arguments = message.getCommandArguments();        
        String cmdArg1 = ((arguments != null && arguments.size() > 0) ?
                          arguments.get(0) : null);        
        if (MiPushClient.COMMAND_REGISTER.equals(command)) {            
            if (message.getResultCode() == ErrorCode.SUCCESS) {
               ZhugeSDK.getInstance().setThirdPartyPushUserId
                            (ZhugeSDK.PushChannel.XIAOMI,cmdArg1);
            }       
        }    
     }

统计第三方推送的到达率

为了统计第三方推送的到达率,需要在合适的地方,调用如下接口:

    //当消息到达时,调用    
    ZhugeSDK.getInstance().onMsgRecved(ZhugeSDK.PushChannel  channel, Object t);    
    //当消息被用户阅读时,调用    
    ZhugeSDK.getInstance().onMsgReaded(ZhugeSDK.PushChannel  channel, Object t);

channel   ZhugeSDK的一个内部枚举类,对应不同的平台 Object t对于不同的平台,需要传递不同的对象

友盟

想统计友盟的推送通知信息的送达,需要您重写UmengMessageHandler类的dealWithNotificationMessage(context,uMessage)方法,在该方法中添加如下代码:

    JSONObject raw = uMessage.getRaw();    
    ZhugeSDK.getInstance().onMsgRecved(ZhugeSDK.PushChannel.UMENG,raw);

百度

对于最新版(v4.5.1)的百度推送,请在自定义的继承自PushMessageReceiver的BroadcastReceiver里,在onNotificationArrived中调用ZhugeSDK.getInstance().onMsgRecved(),在onNotificationClicked中调用ZhugeSDK.getInstance().onMsgReaded()。

   @Override   
   public void onNotificationArrived(Context context,String title,
               String description, String customContentString) {        
               ZhugeSDK.getInstance().onMsgRecved(
                       ZhugeSDK.PushChannel.BAIDU,customContentString);      
                }   
   @Override   
   public void onNotificationClicked(Context context, String title,
               String description, String customContentString)  {        
               ZhugeSDK.getInstance().onMsgReaded(
                       ZhugeSDK.PushChannel.BAIDU,customContentString);    
               }

对于之前版本的百度推送,通知内容只有在用户点击通知时才可以拿到,所以消息到达无法统计,只有用户点击时才能统计。

在你自己实现的继承自FrontiaPushMessageReceiver的BroadcastReceiver中,在onNotificationClicked(Context context,  String title,  String description, String customContentString)里,将最后一个参数customContentString传给我们。

    public void onNotificationClicked(Context context, String s, String s1,String s2) {        
        ZhugeSDK.getInstance().onMsgReaded(ZhugeSDK.PushChannel.BAIDU,s2);    
    }

个推

个推的通知内容无法得到,所以无法统计个推的通知到达。

信鸽

在您实现的用来接收信鸽推送的BroadcastReceiver,将XGPushShowedResult.getCustomContent()上传至服务器即可,如果您是继承的XGPushBaseReceiver,则可按如下集成:

    @Override    
    public void onNotifactionClickedResult(Context context,
                XGPushClickedResult xgPushClickedResult) {    
        //消息点击           
        ZhugeSDK.getInstance().onMsgReaded(ZhugeSDK.PushChannel.XINGE,
                xgPushClickedResult.getCustomContent());    
        }    
    @Override    
    public void onNotifactionShowedResult(Context context,
                XGPushShowedResult xgPushShowedResult) {        
        if (context == null || xgPushShowedResult == null) {            
                return;        
        }       
        //消息送达       
        ZhugeSDK.getInstance().onMsgRecved(ZhugeSDK.PushChannel.XINGE,
                xgPushShowedResult.getCustomContent());    
       }

极光

在您实现的用来接收推送的BroadcastReceiver中,可按如下示例统计:

    public void onReceive(Context context, Intent intent) {        
        Bundle bundle = intent.getExtras(); 
        String extraExtra = JPushInterface.EXTRA_EXTRA;       
        if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals
                         (intent.getAction())) {            
        //消息送达            
        ZhugeSDK.getInstance().onMsgRecved(ZhugeSDK.PushChannel.JPUSH,
                          bundle.getString(extraExtra));}        
        else if(JPushInterface.ACTION_NOTIFICATION_OPENED.equals
                          (intent.getAction())){            
        //消息阅读                                   
        ZhugeSDK.getInstance().onMsgReaded(ZhugeSDK.PushChannel.JPUSH,
                          bundle.getString(extraExtra));    
        }

小米推送

小米的通知内容同样只有在用户点击通知时才可以拿到,所以消息到达无法统计,只有用户点击时才能统计。 在你自己实现的用来接受小米推送的BroadcastReceiver中,得到MiPushMessage信息,从中获取附加字段调用接口上传,如果您继承的是小米的PushMessageReceiver,则统计代码可如下所示:

    public void onReceiveMessage(Context context, MiPushMessage message) {
         Map<String,String> map = message.getExtra();        
         ZhugeSDK.getInstance().onMsgReaded(ZhugeSDK.PushChannel.XIAOMI,
                                            map);
         }
    您需要登录后才可以回复