为Titanium创建自己的安卓推送模块
在手机应用中,推送是一个非常重要的功能。相对来说ios应用的推送功能很容易做,因为它统一都是用苹果的APNS服务实现的。但安卓这边就比较混乱了,虽然谷歌也推出了类似苹果的官方推送服务,但由于谷歌的服务器在国内经常被墙,所以用谷歌官方提供的推送服务在国内是不可行的,所以安卓的应用就只能自己实现推送服务了。但如果完全由自己实现推送功能,那成本是非常大的。所以一般我们会选择一些第三方推送服务,比如极光推送就是一个非常不错的选择。
首先,下载极光推送的安卓sdk,解压,找到打开libs文件夹,里面有两个东西

把armeabi这里文件夹复制到你的Titanium安卓模块项目根目录的libs文件夹里面,如果没有这个文件夹可以创建。模块项目的libs文件夹是用来放第三方动态链接库文件的地方,也就是后缀名为.so的文件。然后把 jpush-sdk-release1.5.5.jar 这个文件复制到模块项目根目录的 lib 文件夹里面。这样我们就可以在模块中使用极光推送的api了。
由于极光推送的api比较简单,所以我们只需要在模块的主文件中把极光推送提供的api与我们能在titanium项目中使用的js方法进行绑定就行了。
模块主文件名为JpushModule.java,其源码如下:
/**
* This file was auto-generated by the Titanium Module SDK helper for Android
* Appcelerator Titanium Mobile
* Copyright (c) 2009-2013 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Apache Public License
* Please see the LICENSE included with this distribution for details.
*
*/
package com.yeshcp.jpush; import java.util.Set;
import java.util.HashSet;
import java.util.HashMap; import org.appcelerator.kroll.KrollModule;
import org.appcelerator.kroll.KrollDict;
import org.appcelerator.kroll.annotations.Kroll;
import org.appcelerator.kroll.KrollFunction;
import org.appcelerator.titanium.TiApplication;
import org.appcelerator.kroll.common.Log;
import cn.jpush.android.api.JPushInterface;
import cn.jpush.android.api.TagAliasCallback; @Kroll.module(name="Jpush", id="com.yeshcp.jpush")
public class JpushModule extends KrollModule
{ // Standard Debugging variables
private static final String TAG = "JpushModule"; // You can define constants with @Kroll.constant, for example:
// @Kroll.constant public static final String EXTERNAL_NAME = value; public JpushModule()
{
super();
} @Kroll.onAppCreate
public static void onAppCreate(TiApplication app)
{
Log.d(TAG, "inside onAppCreate");
JPushInterface.setDebugMode(true);
JPushInterface.init(app); //init jpush
}
@Kroll.method
public void stopPush(){ //stop push
JPushInterface.stopPush(TiApplication.getInstance());
} @Kroll.method
public void resumePush(){ //resume push
JPushInterface.resumePush(TiApplication.getInstance());
} @Kroll.method
public void setAliasAndTags(String alias, Object[] tags,final KrollFunction callback){//设置标签与别名,callback参数必须设置final
Set set=new HashSet();
for(Object n : tags){ //把object数组转化为set,因为jpush需要传入一个set类型
set.add(n.toString());
}
JPushInterface.setAliasAndTags(TiApplication.getInstance(),alias,set,new TagAliasCallback(){//使用匿名内部类作为回调类
@Override
public void gotResult(int arg0, String arg1,Set<String> arg2) {
Log.d("JPush", "Jpush setAliasAndTags status: " + arg0);//状态
if(callback != null){
KrollDict map = new KrollDict(); //回调函数的参数
map.put("code", arg0);
callback.callAsync(getKrollObject(),map); //执行回调
}
}
});
} @Kroll.method
public void setAlias(String alias,final KrollFunction callback){
JPushInterface.setAlias(TiApplication.getInstance(),alias,new TagAliasCallback(){
@Override
public void gotResult(int arg0, String arg1,Set<String> arg2) {
Log.d("JPush", "Jpush setAlias status: " + arg0);//状态
if(callback != null){
KrollDict map = new KrollDict();
map.put("code", arg0);
callback.callAsync(getKrollObject(),map);
}
}
});
} @Kroll.method
public void setTags(Object[] tags,final KrollFunction callback){
Set set=new HashSet();
for(Object n : tags){
set.add(n.toString());
}
JPushInterface.setTags(TiApplication.getInstance(),set,new TagAliasCallback(){
@Override
public void gotResult(int arg0, String arg1,Set<String> arg2) {
Log.d("JPush", "Jpush setTags status: " + arg0);//状态
if(callback != null){
KrollDict map = new KrollDict();
map.put("code", arg0);
callback.callAsync(getKrollObject(),map);
}
}
});
}
}
OK,之后就是编译模块了,编译成功后把得到的模块文件(位于dist文件夹里的一个zip压缩文件)放到你的Titanium项目的根目录,然后运行你的项目,模块就会自动安装了,之后你还要在你项目的tiapp.xml文件里引入你刚安装的模块。
之后我们还可以测试一下是不是有用:
var push = require('com.yeshcp.jpush');
//push.resumePush();
push.setAliasAndTags('chelsea',['grade1','grade2'],function(e){
alert('setAliasAndTags' + JSON.stringify(e));
});
setTimeout(function(){
push.setAlias('',function(e){
alert('setAlias' + JSON.stringify(e));
});
},5000);
setTimeout(function(){
push.setTags([],function(e){
alert('setTags' + JSON.stringify(e));
});
},10000);
注意:极光推送需要配置AndroidManifest.xml文件,具体怎么配置可以去看极光推送的文档。
最后附上我已经编译好的模块文件:com.yeshcp.jpush-android-1.1.zip
为Titanium创建自己的安卓推送模块的更多相关文章
- 个推安卓推送SDK集成步骤详解
以下是一位开发者在集成个推安卓推送SDK时候的亲身经历: 作者:吃饱了想睡. 概述 公司准备采用个推作为第三方推送平台,我作为客户端的头号小鸟,掐指一算已经毕业 0.1 年了,Leader 准备把这个 ...
- Jpush推送模块
此文章已于 14:17:10 2015/3/24 重新发布到 鲸歌 Jpush推送模块 或以上版本的手机系统. SDK集成步骤 .导入 SDK 开发包到你自己的应用程序项目 • 解压 ...
- phonegap创建的ios项目推送消息出现闪退现象
使用phonegap创建的ios项目,推送消息时,当程序在前台运行或者在后台运行状态下,推送消息过来,可以解析并且跳转: 但是在程序从后台退出的状态下,当消息推送过来的时候,点击通知栏,打开程序,程序 ...
- git创建本地分支以及推送本地分之至远程分支
Git分支策略 实际开发中,应当按照以下几个基本原则进行管理: 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能再上边干活. 那在哪干活呢?干活都在dev分支上,也就是说,de ...
- Git:创建远程仓库并推送内容到远程库
1.添加远程仓库 1.1点击该按钮创建一个新仓库 2.推送到远程仓库 2.1根据GitHub的提示,在本地的learngit仓库下运行命令git remote add origin https://g ...
- Git创建本地仓库并推送至远程仓库
作为一名测试同学,日常工作经常需要checkout研发代码进行code review.自己极少有机会创建仓库,一度以为这是一个非常复杂过程.操作一遍后,发现也不过六个步骤,so,让我们一起揭开这神秘面 ...
- 使用Google Cloud Messaging (GCM),PHP 开发Android Push Notifications (安卓推送通知)
什么是GCM? Google Cloud Messaging (GCM) 是Google提供的一个服务,用来从服务端向安卓设备发送推送通知. GCM分为客户端和服务端开发. 这里我们只介绍服务端开发 ...
- docker 创建镜像,并推送到私有仓库
创建镜像 创建 Dockerfile 镜像命名规则:registyr_url / namespace / depart / name : version 用这个规则创建的镜像,可直接推送到私有仓库 ...
- git创建远程分支并推送
1.查看所有分支(-a=>'查看全部的分支') git branch -a 2.创建本地test分支 git branch test 2.2切换test分支 git checkout test ...
随机推荐
- WPF自定义控件与样式(7)-列表控件DataGrid与ListView自定义样式
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: Dat ...
- Android入门(十五)通知
原文链接:http://www.orlion.ga/663/ 1.通知的基本用法 创建通知的步骤,首先需要一个NotificationManager来对通知进行管理,可以调用Context的getSy ...
- Oracle循环语句
PL/SQL有四种类型的循环:简单循环.WHILE循环.FOR循环以及游标FOR循环.在这里我们主要讨论前三种,除此之外,还将讨论Oracle 11g中新引入的CONTINUE语句. 一. 简单循环 ...
- Android调用手机摄像头使用MediaRecorder录像并播放
最近在项目开发中需要调用系统的摄像头录像并播放. 在开发中遇到了两个问题,记录下: (1)开发过程中出现摄像头占用,启动失败,报错.但是我已经在onDestory()中关闭了资源. 报错原因:打开程序 ...
- Android notification的使用
notification出现在通知栏中的提示,特别是在4.0以后改进了不少,这里讲得都是基于4.0及4.1以后的. 分类: 1.普通Notification 2.大布局Notification 图1 ...
- Cardinal:一个用于移动项目开发的轻量 CSS 框架
Cardinal 是一个适用于移动项目的 CSS 框架,包含很多有用的默认样式.矢量字体.可重用的模块以及一个简单的响应式模块系统.Cardinal 提供了一种在多种移动设备上实现可伸缩的字体和布局的 ...
- 使用Html5+C#+微信 开发移动端游戏详细教程 :(三)使用html5引擎搭建游戏框架
教程里的案例我们是通过H5游戏引擎开发,目前H5的游戏引擎比较好用的是白鹭,不过对于新手来说白鹭的开发环境和工具使用过于复杂,这里推荐一个国内大神编写的游戏引擎:lufylegend. 直接在页面引入 ...
- javascript学习4
JavaScript Date(日期)对象 日期对象用于处理日期和时间. JavaScript Date(日期)对象 实例 返回当日的日期和时间 如何使用 Date() 方法或者当日的日期. getT ...
- [New Portal]Windows Azure Virtual Machine (13) 在本地使用Hyper-V制作虚拟机模板,并上传至Azure (3)
<Windows Azure Platform 系列文章目录> 本章介绍的内容是将本地Hyper-V的VHD,上传到Azure数据中心,作为自定义的虚拟机模板. 注意:因为在制作VHD的最 ...
- 如何安装RHEL7.2x64 即红帽7.2虚拟机?
虚拟机RHEL7.2x64的安装步骤 第一步:创建虚拟机 第二步:典型安装下一步: 第三步:创建空的硬 ...