Hybird推送通知然后跳转app

最近公司有个项目,前端使用的是react+node.js,需要增加一个推送功能,我选用了goeast作为本次推送后台,原来的友盟我尝试过,只能推送原生,混合不支持。后台推送前端,前端能接收到消息,这功能已经完成。前端我采用的是H5plus,开发工具hbuilder,H5+的优势是支持了原生40万+的api(官方号称),写法和原生基本差不多,只要你原生写出来没问题,代入js模式即可。然后我傻傻的写了套原生android,测试OK没问题,再代入前端,把对象改成var,把导入的类改成plus.android.importClass.实现了安卓的推送,弹出通知,点击跳转到指定app,没有app跳转到指定网页。
下图是我要实现的功能。


DF2A9CF42BB21C4F5B94BE2E1E0AE0F8.jpg

下图是原生的代码


image.png

以下是js开启推送的弹出通知跳转的代码
<script type="text/javascript">
            var mainActivity = null,
                name = null,
                Context = null,
                Notification = null,
                NotificationManager = null,
                PendingIntent = null,
                Intent = null,
                PackageManager = null,
                Uri = null,
                appkeyGoEasy = null;
            document.addEventListener("plusready", function() {
                //判断是ios还是安卓
                judgePlatform(); //安卓调用安卓的方法,ios调用ios的方法
                
            }, false);
            var goEasy = new GoEasy({
                appkey: 'XXXXXXXXXXXXXX'
            });
            goEasy.subscribe({
                channel: 'XXXXXXXXXXXX',
                onMessage: function(message) {
                    alert(appkeyGoEasy);
                    alert(message.content);
                    //根据当前手机是安卓还是ios做判断
                    if(name == "Android") {
                        njsNotifactionForAndroid(message);
                    } else if(name == "iOS") {
                        createLocalMessageForIOS(message.content, message.content, 17301620);
                    }
                }
            });

            //mainActivity就相当于this,Context是上下文
            function njsNotifactionForAndroid(message) {
                var builder = new Notification.Builder(mainActivity);
                var manager = mainActivity.getSystemService(Context.NOTIFICATION_SERVICE);
                builder.setSmallIcon(17301620);
                builder.setContentText(message.content);
                builder.setContentTitle(message.content);
                builder.setAutoCancel(true); // 点击跳转后自动销毁  
                builder.setDefaults(Notification.DEFAULT_VIBRATE); //向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置,使用defaults属性,可以组合:
                var pManager = mainActivity.getPackageManager();
                var intent = plus.android.invoke(pManager, "getLaunchIntentForPackage", "io.dcloud.H53302ED8");
                //intent如果为null就说明没有安装。这个时候给用户跳转到一个webview进行下载
                if(null == intent) {
                    // 当前Webview对象的实例
                    var uri = Uri.parse("http://www.baidu.com/");
                    intent = new Intent(Intent.ACTION_VIEW, uri);
                    //var wv = plus.android.currentWebview();
                    // 跳转页面,实际应该是下载地址,放在这里即可
                    //plus.android.invoke(wv, "loadUrl", "http://www.baidu.com/");
                    var pendingIntent = PendingIntent.getActivity(mainActivity, 0X0002, intent, PendingIntent.FLAG_UPDATE_CURRENT);
                    builder.setContentIntent(pendingIntent); //点击开启
                    manager.notify(0X0001, builder.getNotification());
                } else {
                    var pendingIntent = PendingIntent.getActivity(mainActivity, 0X0002, intent, PendingIntent.FLAG_UPDATE_CURRENT);
                    builder.setContentIntent(pendingIntent); //点击开启
                    manager.notify(0X0001, builder.getNotification());
                }
            }

            //判断是IOS还是安卓
            function judgePlatform() {
                switch(plus.os.name) {
                    case "Android":
                        // Android平台: plus.android.*  程序全局环境对象,内部自动导入Activity类
                        alert("安卓==>" + plus.os.name);
                        initAndroid(); //对安卓的类进行初始化
                        break;
                    case "iOS":
                        name = "iOS";
                        // iOS平台: plus.ios.*
                        alert("苹果==>" + plus.os.name);
                        break;
                    default:
                        // 其它平台
                        break;
                }
            }

            function initAndroid() {
                name = "Android";
                mainActivity = plus.android.runtimeMainActivity();
                Context = plus.android.importClass("android.content.Context");
                Notification = plus.android.importClass("android.app.Notification");
                NotificationManager = plus.android.importClass("android.app.NotificationManager");
                PendingIntent = plus.android.importClass("android.app.PendingIntent");
                Intent = plus.android.importClass("android.content.Intent");
                PackageManager = plus.android.importClass("android.content.pm.PackageManager");
                Uri = plus.android.importClass("android.net.Uri");
            }

            /**
             * IOS原生方法
             * @param {Object} contentTitle
             * @param {Object} contentText
             * @param {Object} smallIcon
             */
            function createLocalMessageForIOS(contentTitle, contentText, smallIcon) {
                console.log('ios begin.');
                var UILocalNotification = plus.ios.importClass("UILocalNotification");
                // 创建UILocalNotification类的实例对象
                var localNotification = new UILocalNotification();
                //设置调用时间
                var NSDate = plus.ios.importClass('NSDate');
                var myNSDate = new NSDate();
                myNSDate.dateWithTimeIntervalSinceNow = 1; //1秒后触发
                localNotification.fireDate = myNSDate;
                localNotification.alertBody = contentText;
                localNotification.applicationIconBadgeNumber = 3;
                localNotification.alertAction = '打开应用!';
                localNotification.alertLaunchImage = 'Default';
                localNotification.soundName = UILocalNotification.DefaultSoundName;
                var UIApplication = plus.ios.importClass("UIApplication");
                var myUIApplication = new UIApplication();
                myUIApplication.scheduleLocalNotification = localNotification;
                //销毁对象实例
                plus.ios.deleteObject(localNotification);
                plus.ios.deleteObject(myUIApplication);
                plus.ios.deleteObject(myNSDate);
                console.log('ios end.');
            }
        </script>
    </head>

    <body>
        <a href="index.html">刷新</a>
    </body>

上述代码安卓实现了推送,通知等功能,使用之后给我的感觉H5+确实强大,而且打包之后性能不输原生,但是开发当中也发现H5+有很多改进的地方,官方引入了安卓四大组件之一activity,可是broadCastReceiver,service,ContentProvide呢?举个简单例子,安卓中消息推送,即使关闭app,还是有办法开启service,注册静态广播,写一个fork的c函数,让他在后台运行不被杀死。可是H5+要实现貌似还不行,或者是我还没看到,但是html5+的跨平台确实对于原生有极大的冲击力。

抛出问题:1.以上的IOS这串代码我测试下来通知出不来,根据官方api写的,问题不知道在哪里,请各位帮忙看看,找下问题,想了好久了,没找出原因。


image.png

2.这个channel值如何获取,如何设置呢。因为需要个推,这个也是我在想的问题,希望知情小伙伴一起看看。


image.png

以下的连接是为了实现这功能所看的相关资料,虽然IOS还没搞出来,但是感觉学到了很多新东西,对于H5+大开眼界,以下学习资料和大家一起分享。

H5+官方api
东翌编程
HTML5+ API 模块整理
HTML5+ App开发Native.js入门指南
Native.js,让js像原生一样强大+++江树源(数字天堂CTO)
HTML5+安卓api
HTML5+培训资源视频教程汇总
Hybird安卓的调试方式
Hybird苹果的调试方式
IOS推送

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,434评论 25 707
  • 作为一个前端程序猿,下面这些站会让你眼前一亮。 amazeui框架组建丰富 http://amazeui.org...
    欧巴冰冰阅读 8,806评论 18 303
  • 前端知识体系http://www.cnblogs.com/sb19871023/p/3894452.html 前端...
    秋风喵阅读 12,347评论 7 163
  • 罗永浩的创业课 第五篇 创业对人最大的改变是什么? 偏执的性格对企业家而言是一个加分项,但不是一个必须的能力,必须...
    快刀笔吏阅读 243评论 0 1
  • 读书会舍长说:她的朋友以前很自卑,认为自己长得不好,身材不好,家境一般,但是后来突然想通了,之前那些不是自己可以决...
    暗黑22k阅读 229评论 0 0