cordova(安卓)(腾讯信鸽注册绑定与反绑定) 插件开发

腾讯信鸽快速开发指南

http://developer.xg.qq.com/index.php/Android_SDK%E5%BF%AB%E9%80%9F%E6%8C%87%E5%8D%97

本文参考

http://bbs.phonegap100.com/thread-1160-1-1.html

1.java代码

安卓项目目录结构如下:

在这里我们开发一个腾讯推送注册用户插件,java代码如下

 1 /*
 2  * PhoneGap is available under *either* the terms of the modified BSD license *or* the
 3  * MIT License (2008). See http://opensource.org/licenses/alphabetical for full text.
 4  *
 5  * Copyright (c) 2005-2010, Nitobi Software Inc.
 6  * Copyright (c) 2011, IBM Corporation
 7  */
 8 
 9 package com.cordova.plugin.tencent;
10 
11 import org.json.JSONArray;
12 import org.json.JSONException;
13 import org.apache.cordova.CallbackContext;
14 import org.apache.cordova.CordovaPlugin;
15 
16 import android.content.Context;
17 import android.content.Intent;
18 
19 import com.tencent.android.tpush.XGIOperateCallback;
20 import com.tencent.android.tpush.XGPushManager;
21 import com.tencent.android.tpush.service.XGPushService;
22 
23 public class XinGe extends CordovaPlugin {
24 
25     @Override
26     // action 插件方法
27     // args 传递过来的参数,获取方法为args.getString(数组中的位置);
28     // callbackContext 回调函数
29     public boolean execute(String action, JSONArray args,
30             final CallbackContext callbackContext) throws JSONException {
31         Context context = this.cordova.getActivity();
32         // 判断要调用的方法
33         if (action.equals("registerPush")) {
34             // 获取第一个参数,用户名
35             String userName = args.getString(0);
36             // 调用方法
37             this.registerPush(context, callbackContext, userName);
38             return true;
39         } else if (action.equals("unregisterPush")) {
40             // 反注册,取消推送
41             XGPushManager.unregisterPush(context);
42             return true;
43         }
44         // 回调失败的函数
45         callbackContext.error("该方法不存在!");
46         return false;
47     }
48 
49     // 推送注册
50     private void registerPush(Context context,
51             final CallbackContext callbackContext, String userName) {
52         // 推送别名注册方法,可以根据别名进行推送
53         XGPushManager.registerPush(context, userName, new XGIOperateCallback() {
54             @Override
55             public void onSuccess(Object data, int flag) {
56                 // 回调成功的函数
57                 callbackContext.success();
58             }
59 
60             @Override
61             public void onFail(Object data, int errCode, String msg) {
62                 // 回调失败的函数
63                 callbackContext.error(msg);
64             }
65         });
66         // 在XGPushManager.registerPush(context)或其它版本的注册接口之后调用以下代码
67         // 使用ApplicationContext
68         // 兼容MIUI V6
69         Intent service = new Intent(context, XGPushService.class);
70         context.startService(service);
71     }
72 }

 

 

然后在res/xml/config.xml文件中加入以下配置

1   <feature name="<service_name>">
2         <param name="android-package" value="<full_name_including_namespace>" />
3     </feature>

在这里service_name值得是java代码中的类名,full_name_including_namespace只的是报名+类名,在这里我的配置是

1     <feature name="XinGe" >
2         <param
3             name="android-package"
4             value="com.cordova.plugin.tencent.XinGe" />
5     </feature>

2.js代码

在assets/www/cordova_plugins.js中进行修改

第4到13行,第160行是自行添加内容

  1 cordova.define('cordova/plugin_list',
  2 function (require, exports, module) {
  3     module.exports = [
  4     {
  5         // js所在位置
  6         "file": "plugins/com.cordova.plugin.tencent/www/android/xinGe.js",
  7         // js中的id
  8         "id": "com.cordova.plugin.tencent.xinGe",
  9         // 通过window.tencentXinGe直接获取插件
 10         "clobbers": [
 11             "tencentXinGe"
 12         ]
 13     },
 14     //pg自带插件配置
 15     {
 16         "file": "plugins/org.apache.cordova.camera/www/CameraConstants.js",
 17         "id": "org.apache.cordova.camera.Camera",
 18         "clobbers": ["Camera"]
 19     },
 20     {
 21         "file": "plugins/org.apache.cordova.camera/www/CameraPopoverOptions.js",
 22         "id": "org.apache.cordova.camera.CameraPopoverOptions",
 23         "clobbers": ["CameraPopoverOptions"]
 24     },
 25     {
 26         "file": "plugins/org.apache.cordova.camera/www/Camera.js",
 27         "id": "org.apache.cordova.camera.camera",
 28         "clobbers": ["navigator.camera"]
 29     },
 30     {
 31         "file": "plugins/org.apache.cordova.camera/www/CameraPopoverHandle.js",
 32         "id": "org.apache.cordova.camera.CameraPopoverHandle",
 33         "clobbers": ["CameraPopoverHandle"]
 34     },
 35     {
 36         "file": "plugins/org.apache.cordova.file/www/DirectoryEntry.js",
 37         "id": "org.apache.cordova.file.DirectoryEntry",
 38         "clobbers": ["window.DirectoryEntry"]
 39     },
 40     {
 41         "file": "plugins/org.apache.cordova.file/www/DirectoryReader.js",
 42         "id": "org.apache.cordova.file.DirectoryReader",
 43         "clobbers": ["window.DirectoryReader"]
 44     },
 45     {
 46         "file": "plugins/org.apache.cordova.file/www/Entry.js",
 47         "id": "org.apache.cordova.file.Entry",
 48         "clobbers": ["window.Entry"]
 49     },
 50     {
 51         "file": "plugins/org.apache.cordova.file/www/File.js",
 52         "id": "org.apache.cordova.file.File",
 53         "clobbers": ["window.File"]
 54     },
 55     {
 56         "file": "plugins/org.apache.cordova.file/www/FileEntry.js",
 57         "id": "org.apache.cordova.file.FileEntry",
 58         "clobbers": ["window.FileEntry"]
 59     },
 60     {
 61         "file": "plugins/org.apache.cordova.file/www/FileError.js",
 62         "id": "org.apache.cordova.file.FileError",
 63         "clobbers": ["window.FileError"]
 64     },
 65     {
 66         "file": "plugins/org.apache.cordova.file/www/FileReader.js",
 67         "id": "org.apache.cordova.file.FileReader",
 68         "clobbers": ["window.FileReader"]
 69     },
 70     {
 71         "file": "plugins/org.apache.cordova.file/www/FileSystem.js",
 72         "id": "org.apache.cordova.file.FileSystem",
 73         "clobbers": ["window.FileSystem"]
 74     },
 75     {
 76         "file": "plugins/org.apache.cordova.file/www/FileUploadOptions.js",
 77         "id": "org.apache.cordova.file.FileUploadOptions",
 78         "clobbers": ["window.FileUploadOptions"]
 79     },
 80     {
 81         "file": "plugins/org.apache.cordova.file/www/FileUploadResult.js",
 82         "id": "org.apache.cordova.file.FileUploadResult",
 83         "clobbers": ["window.FileUploadResult"]
 84     },
 85     {
 86         "file": "plugins/org.apache.cordova.file/www/FileWriter.js",
 87         "id": "org.apache.cordova.file.FileWriter",
 88         "clobbers": ["window.FileWriter"]
 89     },
 90     {
 91         "file": "plugins/org.apache.cordova.file/www/Flags.js",
 92         "id": "org.apache.cordova.file.Flags",
 93         "clobbers": ["window.Flags"]
 94     },
 95     {
 96         "file": "plugins/org.apache.cordova.file/www/LocalFileSystem.js",
 97         "id": "org.apache.cordova.file.LocalFileSystem",
 98         "clobbers": ["window.LocalFileSystem"],
 99         "merges": ["window"]
100     },
101     {
102         "file": "plugins/org.apache.cordova.file/www/Metadata.js",
103         "id": "org.apache.cordova.file.Metadata",
104         "clobbers": ["window.Metadata"]
105     },
106     {
107         "file": "plugins/org.apache.cordova.file/www/ProgressEvent.js",
108         "id": "org.apache.cordova.file.ProgressEvent",
109         "clobbers": ["window.ProgressEvent"]
110     },
111     {
112         "file": "plugins/org.apache.cordova.file/www/fileSystems.js",
113         "id": "org.apache.cordova.file.fileSystems"
114     },
115     {
116         "file": "plugins/org.apache.cordova.file/www/requestFileSystem.js",
117         "id": "org.apache.cordova.file.requestFileSystem",
118         "clobbers": ["window.requestFileSystem"]
119     },
120     {
121         "file": "plugins/org.apache.cordova.file/www/resolveLocalFileSystemURI.js",
122         "id": "org.apache.cordova.file.resolveLocalFileSystemURI",
123         "merges": ["window"]
124     },
125     {
126         "file": "plugins/org.apache.cordova.file/www/android/FileSystem.js",
127         "id": "org.apache.cordova.file.androidFileSystem",
128         "merges": ["FileSystem"]
129     },
130     {
131         "file": "plugins/org.apache.cordova.file/www/fileSystems-roots.js",
132         "id": "org.apache.cordova.file.fileSystems-roots",
133         "runs": true
134     },
135     {
136         "file": "plugins/org.apache.cordova.file/www/fileSystemPaths.js",
137         "id": "org.apache.cordova.file.fileSystemPaths",
138         "merges": ["cordova"],
139         "runs": true
140     },
141     {
142         "file": "plugins/org.apache.cordova.file-transfer/www/FileTransferError.js",
143         "id": "org.apache.cordova.file-transfer.FileTransferError",
144         "clobbers": ["window.FileTransferError"]
145     },
146     {
147         "file": "plugins/org.apache.cordova.file-transfer/www/FileTransfer.js",
148         "id": "org.apache.cordova.file-transfer.FileTransfer",
149         "clobbers": ["window.FileTransfer"]
150     },
151     {
152         "file": "plugins/org.apache.cordova.inappbrowser/www/inappbrowser.js",
153         "id": "org.apache.cordova.inappbrowser.inappbrowser",
154         "clobbers": ["window.open"]
155     }];
156     module.exports.metadata =
157     // TOP OF METADATA
158     {
159         //版本号
160         "com.cordova.tencentXinGe": "1.0.0",
161         "org.apache.cordova.camera": "0.3.3",
162         "org.apache.cordova.file": "1.3.1",
163         "org.apache.cordova.file-transfer": "0.4.7",
164         "org.apache.cordova.inappbrowser": "0.5.3"
165     }
166     // BOTTOM OF METADATA
167 });

在assets/www/plugins中新增com.cordova.plugin.tencent/www/android文件夹,其中新增xinGe.js,代码如下

 1 //注册com.cordova.plugin.tencent.xinGe同cordova_plugins.js中id
 2 cordova.define("com.cordova.plugin.tencent.xinGe", function (require, exports, module) {
 3 var cordova = require('cordova');
 4 
 5 var Tencent = function () {
 6     //success 注册成功执行方法
 7     //fail 注册失败执行方法
 8     //推送注册
 9     Tencent.prototype.registerPush = function (success, fail, userName) {
10         //'XinGe'对应我们在java文件中定义的类名
11         //registerPush对应我们在这个类中调用的自定义方法
12         //userName是我们客户端传递给这个方法的参数,是个string字段
13         cordova.exec(success, fail, 'XinGe', 'registerPush', [userName])
14     }
15     //推送反注册
16     Tencent.prototype.unregisterPush = function () {
17         cordova.exec(null, null, 'XinGe', 'unregisterPush', [])
18     }
19 }
20 var tencent = new Tencent();
21 
22 module.exports = tencent;
23 
24 });

在应用中使用

1             //注意需要初始化pg才能起作用
2             //推送绑定
3             window.tencentXinGe.registerPush(function () {
4                 console.log('注册成功!');
5             }, function (mes) {
6                 console.log('注册失败!', mes);
7             },
8             //全局变量用户名
9             config.userMes.name);

这样我们就可以进行推送了

 

posted @ 2014-11-18 16:37  魔狼再世  阅读(2526)  评论(1编辑  收藏  举报