专栏首页玩转全栈Flutter封装阿里push
原创

Flutter封装阿里push

仓库地址:dalipush

因为阿里的推送对小米和华为的离线推送兼容的比较好,因此,我使用flutter将阿里推送封装了一下,效过图,如下所示,这里是将进程杀死之后,小米设备收到的推送效果。

小米里面推送示例

HOW TO USE

一、资源申请

1、首先,你需要到阿里云上面去申请一个appid,申请地址:阿里云

2、注意,如果你需要小米,华为离线推送的话,需要参考这里 参考,注意,华为的离线推送测试一定要等到审核通过之后

二、Andriod方面

1、写一个application继承自FlutterApplication

注意,这个是阿里推送的要求

移动推送的初始化必须在Application中,不能放到Activity中执行。移动推送在初始化过程中将启动后台进程channel,必须保证应用进程和channel进程都执行到推送初始化代码。 如果设备成功注册,将回调callback.onSuccess()方法。 但如果注册服务器连接失败,则调用callback.onFailed方法,并且自动进行重新注册,直到onSuccess为止。(重试规则会由网络切换等时间自动触发。) 请在网络通畅的情况下进行相关的初始化调试,如果网络不通,或者App信息配置错误,在onFailed方法中,会有相应的错误码返回,可参考错误处理。

public class FApp extends io.flutter.app.FlutterApplication {

    private static final String TAG = "FApp";

    @Override
    public void onCreate() {
        super.onCreate();
        initCloudChannel(this);
        //////注意,下面是小米华为的辅助通道,是一种黑科技,可以在进程杀死的情况下,收到推送消息,所谓的离线推送,
        /////如果需要,注意读一下下面一节,服务端代码那块,如果不需要,直接注释2行,可以满足app在线收到通知
          // 注册方法会自动判断是否支持小米系统推送,如不支持会跳过注册。
        MiPushRegister.register(this, "2882303761517882020", "5671788227020");
        // 注册方法会自动判断是否支持华为系统推送,如不支持会跳过注册。
        HuaWeiRegister.register(this);
        //GCM/FCM辅助通道注册,这个地方打开的情况我没测试,不过,GCM你懂的。
        //        GcmRegister.register(this, sendId, applicationId); //sendId/applicationId为步骤获得的参数
    }

    /**
     * 初始化云推送通道
     *
     * @param applicationContext
     */
    private void initCloudChannel(Context applicationContext) {
        PushServiceFactory.init(applicationContext);
        CloudPushService pushService = PushServiceFactory.getCloudPushService();
        pushService.register(applicationContext, new CommonCallback() {
            @Override
            public void onSuccess(String response) {
                Log.d(TAG, "init cloudchannel success");
            }

            @Override
            public void onFailed(String errorCode, String errorMessage) {
                Log.d(TAG, "init cloudchannel failed -- errorcode:" + errorCode + " -- errorMessage:" + errorMessage);
            }
        });
    }
}

2、 服务端代码,离线推送是需要后端配合的,后台按照阿里推送的文档部署好了之后,你可以做成管理端,并封装这样的一个接口,来推送消息。

//服务端配置如下:

PushRequest pushRequest = new PushRequest();
// 其余设置省略
// ...
// 0:表示消息(默认为0), 1:表示通知
pushRequest.setType(1);
// 标题
pushRequest.setTitle("hello");
// 内容
pushRequest.setBody("PushRequest body");
// 点击通知后动作 "APPLICATION" : 打开应用 "ACTIVITY" : 打开AndroidActivity "URL" : 打开URL "NONE" : 无跳转
pushRequest.setAndroidOpenType("APPLICATION");
// 设置辅助弹窗打开Activity,注意,这里我配置为了,com.brzhang.dalipush.PopupPushActivity
pushRequest.setAndroidPopupActivity("com.brzhang.dalipush.PopupPushActivity");
// 设置辅助弹窗通知标题
pushRequest.setAndroidPopupTitle("hello2");
// 设置辅助弹窗通知内容
pushRequest.setAndroidPopupBody("PushRequest body2");
// 设定android类型设备通知的扩展属性
pushRequest.setAndroidExtParameters("{\"k1\":\"android\",\"k2\":\"v2\"}");
请你们的后端开发注意,这里的setAndroidPopupActivity可默认配置为"com.brzhang.dalipush.PopupPushActivity",我的插件中集成了这个activity,当然,你完全可以替换为自己的activity,只需要在Android目录下去
3、修改build.gradle文件
defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "com.brzhang.sophixtest"
        minSdkVersion 16
        targetSdkVersion 27
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        manifestPlaceholders = [
                ALIPUSH_PKGNAME  : applicationId,
                ALIPUSH_APPKEY   : "24xxxx5693", //ALIPush上注册的包名对应的appkey.
                ALIPUSH_APPSECRET: "dd973xxxxxxxxxxxf575aee1ab1", //appsecret.
        ]
        //todo
//        ndk {
//            //选择要添加的对应cpu类型的.so库。
//            abiFilters 'armeabi', 'x86', 'armeabi-v7a', 'armeabi-v8a'
//        }
    }

主要是两个地方注意: 一个是applicationId,这里要填你在阿里上申请的appid相关的那个包名 二个是manifestPlaceholders,这里也注意填写你自己的阿里云key,secret。

4、请注意,不要使用我的appid到你的项目中,你用了也没办法推送,因为,要等登陆我的账号去发推送消息啊。

三、IOS方面。

ios使用起来就没有那么复杂了,唯一的是:ios需要去配置APNS推送证书,可以参考阿里推送ios配置文档,到苹果开发者中心申请的步骤也是繁琐的一逼,不过,搞过一次之后,你就会发现非常简单,最后导出的p12文件交给阿里push就好。

然后,你的ios工程中的配置,可以参考本项目example目录下的配置,

1、appDelegate.m文件

2、AliyunEmasServices-info.plist的导入

3、pod文件编写

大概经历这些步骤,cmd+r

就ok了。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 在微服务中启用分布式跟踪 | 微服务系列第十篇

    跟踪是一种用于监视软件的执行路径、以便进行调试或故障排除的专门的方法。您可能熟悉TRACE日志级别,其中包含有关每个方法调用的信息。跟踪微服务的目标类似于此级别...

    魏新宇
  • 紧急通知:无论你英语多差,只要想学,看了此文必有改变!

    夜深了,Benson关了灯正准备上床休息,手机屏幕亮了,他拿起手机一看,是露露发来的短信:

    用户1907613
  • 程序员给心意企业打电话被拒后失声痛哭:为什么不录用我

     每个人都有特别难过的时候,这个时候往往需要别人帮一把。无独有偶,一名网友在上海张江软件园某星巴克店内见到了心酸一幕:看到一个右手有缺陷的程序员,给他的意向企业...

    一墨编程学习
  • 转录因子(TF)的作用方式

    转录因子主要有3种作用方式调控基因表达: TF既可以结合在DNA临近的增强子也可以结合在启动子玉玉。和TF有关的基因转录既可以上调也可以下调,TF通过以下几个...

    Y大宽
  • 程序员你伤不起

    这本书以随笔的形式描述了作者的2005年至2011年的一些个人经历。主要是工作、生活当中的感悟,以及一些技术思想的分享。作者的文笔比较调侃和幽默,不需要花费很大...

    张子阳
  • 程序员年薪30万,嘲讽清华北大教授工资低,网友:你真的太年轻

    我国现在经济水平飞速发展,人们的生活条件也越来越好。不过这条件一好起来,就会出现一些意想不到的问题。

    一墨编程学习
  • 聊聊架构

    这本书原本是发表在InfoQ上的专栏文章,原名叫做《架构漫谈》,因为反响良好,所以编撰成书。全书没有涉及过多的具体技术,更像是一些随笔。

    张子阳
  • 博士程序员感慨互联网行业太累,想进事业单位被网友批:浪费人才

    一名计算机博士毕业后在互联网行业从事程序员工作,但随着年龄的增长,感觉越发吃不消了:坐标北京,36岁的博士程序员,技术一般,在互联网公司工作的很吃力,且加班多,...

    一墨编程学习
  • 读《学习之道》— 深入理解拖延的习惯

    神经模型从频繁的练习中产生,他们自动联结形成组块,而组块和习惯有着密切的联系。习惯可以帮我们节省力气,它能为我们的大脑腾出空间进行别的活动。以倒车为例,开始时迎...

    Ewall
  • 程序员月薪12k被老板逼走,换到国企月薪20k,还5点下班!

    211,985学校本科毕业5年,UI,上一家创业公司12k,每天被老板嫌弃做得不好,加班不够多。

    一墨编程学习

扫码关注云+社区

领取腾讯云代金券