TP5+Hbuilder+极光推送

TP5+Hbuilder+极光推送

  • PHP部分
  • Hbuilder本地打包
  • 参考【Android平台本地(离线)打包指南】
  • [参考【JPush HBuilder Demo步骤】](https://github.com/jpush/jpush-hbuilder-demo#install)
  • 打包apk报错
  • 其它问题参数

PHP部分

// 极光的key和secret,在极光注册完应用后,会生成
protected function _initialize()
{
    parent::_initialize();
    $jpushConfig = Config::get("jpush");
    $this->app_key = $jpushConfig['app_key'];
    $this->master_secret = $jpushConfig['master_secret'];
    $this->url = "https://api.jpush.cn/v3/push";//推送的地址

    $this->userModel = model('User');
    //用户信息
    if (Session::get('user.share_user_id')) {
        $this->user_id = Session::get('user.share_user_id');
        $this->company_id = Session::get('user.share_com_id');
    } else {
        $this->user_id = Session::get('user.id');
        $userInfo = $this->userModel->where(['id' => $this->user_id])->find();
        $this->company_id = $userInfo['company_id'];
        if ($this->company_id != Session::get('user.company_id'))
            Session::set('user.company_id', $this->company_id);
    }
}

public function sendMsg($type,$pushData){
    //需要为设备设置aliassendMsg
    if($type=='all'){
        $receiver = 'all';
    }else{
        $alias = $type;
        $receiver['alias'] = array($alias);
    }


    $content = $pushData['content'];
    $title = $pushData['title'];

    $extras = array();
    $result = $this->push($receiver,$content,$title,$extras);
    if($result){
        $res_arr = json_decode($result, true);
        if(isset($res_arr['error'])){   //如果返回了error则证明失败
            //错误信息 错误码
            echo json_encode(array('status'=>0,'errorCode'=>$res_arr['error']['code'],'errorMessage'=>$res_arr['error']['message']));
            exit;
        }else{
            //处理成功的推送......
            //可执行一系列对应操作~
            echo json_encode(array('status'=>1,'msg'=>'推送成功'));
            exit;
        }
    }else{      //接口调用失败或无响应
        echo json_encode(array('status'=>0,'msg'=>'接口调用失败或无响应'));
        exit;
    }

}

public function push($receiver = 'all', $content = '', $title = '', $extras = array(), $m_time = 86400)
{
    $app_key = $this->app_key; //待发送的应用程序(appKey),只能填一个。
    $master_secret = $this->master_secret; //主密码
    $url = "https://api.jpush.cn/v3/push"; //推送的地址
    $base64 = base64_encode("{$app_key}:{$master_secret}");
    $header = array("Authorization:Basic {$base64}", "Content-Type:application/json");
    $data = array();
    $data['platform'] = 'all'; //目标用户终端手机的平台类型android,ios,winphone
    $data['audience'] = $receiver; //目标用户

    $data['notification'] = array(
        //统一的模式--标准模式
        "alert" => $content,
        //安卓自定义
        "android" => array(
            "alert" => $content,
            "title" => $title,
            "builder_id" => 1,
            "extras" => array("data" => $extras)
        ),
        //ios的自定义
        "ios" => array(
            "alert" => $content,
            "badge" => "1",
            "sound" => "default",
            "content-available" => true,
            "extras" => array("data" => $extras)
        ),
    );

    //附加选项
    $data['options'] = array(
        "sendno" => time(),
        "time_to_live" => $m_time, //保存离线时间的秒数默认为一天
        "apns_production" => false, //指定 APNS 通知发送环境:0开发环境,1生产环境。
    );
    $param = json_encode($data);

    $res = $this->push_curl($param, $header, $url);

    if ($res) { //得到返回值--成功已否后面判断
        return $res;
    } else { //未得到返回值--返回失败
        return false;
    }
}

//推送的Curl方法
public function push_curl($param = "", $header = "", $url = "")
{
    if (empty($param)) {
        return false;
    }
    $postUrl = $url;
    $curlPost = $param;
    $ch = curl_init(); //初始化curl
    curl_setopt($ch, CURLOPT_URL, $postUrl); //抓取指定网页
    curl_setopt($ch, CURLOPT_HEADER, 0); //设置header
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //要求结果为字符串且输出到屏幕上
    curl_setopt($ch, CURLOPT_POST, 1); //post提交方式
    curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header); // 增加 HTTP Header(头)里的字段
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 终止从服务端进行验证
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    $data = curl_exec($ch); //运行curl

    curl_close($ch);
    return $data;
}

Hbuilder本地打包

步骤:

  1. 选择项目;
  2. 发行;
  3. 原生app-本地打包;
  4. 生成本地打包app资源;
    TP5+Hbuilder+极光推送_第1张图片

参考【Android平台本地(离线)打包指南】

  1. 配置编译工程
    导入演示应用HBuilder-Hello工程
    启动AndroidStudio 点击导入工程“import project”
    TP5+Hbuilder+极光推送_第2张图片
  2. 选中工程所在目录点击“OK”
    TP5+Hbuilder+极光推送_第3张图片
  3. 选择生成的AndroidStudio工程的保存路径,然后点击“next”,
    TP5+Hbuilder+极光推送_第4张图片
  4. 在演示工程中已经配置好HelloH5应用相关资源,完成导入后,可Shift F10直接编译运行:
    TP5+Hbuilder+极光推送_第5张图片
  5. 从SDK目录中拷贝要使用的feature库到工程app/libs目录
    参考“Feature列表.xls”文档确定应用中使用到的扩展API,拷贝libs目录中对应的**“jar”文件拷贝到工程的app->libs目录下。
    如果有引用
    “so”文件需要拷贝到工程的app->src->main->jniLibs**下对应目录中。
    如使用分享功能(新浪微博分享、腾讯微博分享,微信分享),则需要拷贝以下文件:
    TP5+Hbuilder+极光推送_第6张图片
  6. 拷贝完成后在工程中刷新可在工程的libs目录下显示:
    TP5+Hbuilder+极光推送_第7张图片
  7. 配置应用的权限
    参考“Feature列表.xls”文档确定应用中使用到的扩展API,在AndroidManifest.xml文件中删除不用到API的权限。
    如不使用音频(plus.audio.*)相关5+ API,则可删除Audio相关的权限:
    TP5+Hbuilder+极光推送_第8张图片
  8. 配置其它第三方库的数据
    由于第三方库需要使用一些特定的数据,所以在使用时需要将相关参数配置到AndroidManifest.xml文件中。
    如使用分享功能,则需要配置各分享平台的申请应用的相关参数:
    TP5+Hbuilder+极光推送_第9张图片
  9. 配置应用的包名及版本号
    打开AndroidManifest.xml文件,在代码视图中修改根节点的package属性值,如下:
    package为应用的包名,采用反向域名格式,为应用的标识;
    versionCode为应用的版本号,建议与manifest.jsonversion -> code值一致;
    versionName为应用的版本名称,建议与manifest.json中version -> name值一致。
    TP5+Hbuilder+极光推送_第10张图片
  10. 配置应用名称
    打开app->res -> values -> strings.xml文件,修改“app_name”字段值,该值为安装到手机上桌面显示的应用名称,建议与manifest.json中name(基础配置中的应用名称)对应:
    TP5+Hbuilder+极光推送_第11张图片
  11. 配置应用图标和启动界面
    将应用的图标(文件名为icon.png)启动图片按照对应的尺寸拷贝到工程的app->src->main->res -> drawable-XXX目录下:
    TP5+Hbuilder+极光推送_第12张图片
  12. 更新应用资源
    打开app->src->main->assets -> apps 目录,将“HelloH5”目录名称修改为应用manifest.json中的id名称(这步非常重要,否则会导致应用无法正常启动),并将所有应用资源拷贝到其下的www目录中:
    TP5+Hbuilder+极光推送_第13张图片
  13. 配置应用信息
    打开app->src->main->assets -> data下的control.xml文件,修改appid和appver的值:
    appid值为HBuilder应用的appid,必须与应用manifest.json中的id值完全一致;
    appver为应用的版本号,必须与manifest.json中的version -> name值完全一致;
    version值为应用基座版本号(plus.runtime.innerVersion返回的值),不要随意修改。
    TP5+Hbuilder+极光推送_第14张图片
  14. 配置完成编译运行
    应用配置完毕,按Shift F10编译运行应用
    在弹出的设备列表对话框中选择要运行的设备:
    TP5+Hbuilder+极光推送_第15张图片

参考【JPush HBuilder Demo步骤】

Demo 用法
通过 Android Studio 引入项目目录下的 android 目录,再替换 ./android/app/build.gradle 中的「应用的包名」和「应用的 AppKey」。
集成指南
HBuilder 项目集成第三方插件,需先参考 HBuilder 官方的离线打包教程,将您的 HBuilder 项目集成进 Android 工程中。之后再执行以下步骤:

1.拷贝 ./android/app/src/main/java/io.dcloud.feature.jpush 文件夹至你 Android Studio 工程的 /src/main/java/ 目录下。

2.拷贝 ./jpush.js 到你 Android Studio 工程的 /assets/apps/HBuilder应用名/js/ 下。

3.在 /assets/apps/你的应用名/www/manifest.json 文件中添加:

4.在 /assets/data/dcloud_properties.xml 中添加(如果已存在 Push feature,可以直接修改):
TP5+Hbuilder+极光推送_第16张图片
5.在 app/build.gradle 中添加:
TP5+Hbuilder+极光推送_第17张图片
6.在 AndroidManifest.xml 中添加:
TP5+Hbuilder+极光推送_第18张图片

打包apk报错

错误: app:transformClassesWithMultidexlistForDebug

参考:https://www.edwardbeazer.com/execution-failed-for-task-app-transformclasseswithmultidexlistfordebug/
TP5+Hbuilder+极光推送_第19张图片

其它问题参数

androidStudio下集成hbuild推送报错

你可能感兴趣的:(个人记录,hbuilder,极光推送,TP5)