提交 2577031c authored 作者: JarvanMo's avatar JarvanMo

wechat plugin android

上级 c3dd00a7
package com.jarvanmo.wechatplugin
import com.jarvanmo.wechatplugin.config.WechatPluginMethods
import com.jarvanmo.wechatplugin.handler.WechatPluginHandler
import com.jarvanmo.wechatplugin.config.WeChatPluginMethods
import com.jarvanmo.wechatplugin.handler.WeChatPluginHandler
import com.tencent.mm.opensdk.openapi.WXAPIFactory
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
import io.flutter.plugin.common.MethodChannel.Result
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.PluginRegistry.Registrar
class WechatPlugin(): MethodCallHandler {
companion object {
@JvmStatic
fun registerWith(registrar: Registrar): Unit {
val channel = MethodChannel(registrar.messenger(), "wechat_plugin")
channel.setMethodCallHandler(WechatPlugin())
class WechatPlugin(private var channel: MethodChannel,private var registrar: Registrar) : MethodCallHandler {
companion object {
@JvmStatic
fun registerWith(registrar: Registrar): Unit {
val channel = MethodChannel(registrar.messenger(), "wechat_plugin")
channel.setMethodCallHandler(WechatPlugin(channel,registrar))
WeChatPluginHandler.setMethodChannel(channel)
}
}
}
override fun onMethodCall(call: MethodCall, result: Result): Unit {
override fun onMethodCall(call: MethodCall, result: Result): Unit {
when {
WeChatPluginMethods.INIT == call.method -> {
val api = WXAPIFactory.createWXAPI(registrar.context().applicationContext, call.arguments as String?)
WeChatPluginHandler.setWxApi(api)
}
WeChatPluginHandler.apiIsNull() -> {
result.error("config your wxapi first", "config your wxapi first", null)
return
}
else -> WeChatPluginHandler.handle(call, result)
}
if(WechatPluginHandler.wxApi == null){
result.error("config your wxapi first","config your wxapi first",null)
return
}
when (call.method) {
WechatPluginMethods.SHARE_TEXT -> {
WechatPluginHandler.shareText(call)
}
else -> {
result.notImplemented()
}
}
}
}
......@@ -5,9 +5,12 @@ package com.jarvanmo.wechatplugin.config;
* 冷风如刀,以大地为砧板,视众生为鱼肉。
* 万里飞雪,将穹苍作烘炉,熔万物为白银。
**/
public class WechatPluginMethods {
public class WeChatPluginMethods {
public static final String INIT ="initWeChat";
public static final String WE_CHAT_RESPONSE= "onWeChatResponse";
public static final String SHARE_TEXT = "shareText";
public static final String SHARE_IMAGE = "shareImage";
public static final String SHARE_IMAGE = "shareImage";
public static final String SHARE_MUSIC = "shareMusic";
public static final String SHARE_VIDEO ="shareVideo";
public static final String SHARE_WEBSITE = "shareWebsite";
......
package com.jarvanmo.wechatplugin.handler
import com.jarvanmo.wechatplugin.config.WeChatPluginMethods
import com.tencent.mm.opensdk.openapi.IWXAPI
import com.tencent.mm.opensdk.modelbase.BaseResp
import io.flutter.plugin.common.MethodCall
......@@ -7,6 +8,7 @@ import com.tencent.mm.opensdk.modelmsg.SendMessageToWX
import com.jarvanmo.wechatplugin.config.WechatPluginConfig
import com.tencent.mm.opensdk.modelmsg.WXMediaMessage
import com.tencent.mm.opensdk.modelmsg.WXTextObject
import io.flutter.plugin.common.MethodChannel
/***
......@@ -14,11 +16,34 @@ import com.tencent.mm.opensdk.modelmsg.WXTextObject
* 冷风如刀,以大地为砧板,视众生为鱼肉。
* 万里飞雪,将穹苍作烘炉,熔万物为白银。
**/
object WechatPluginHandler {
var wxApi: IWXAPI? = null
object WeChatPluginHandler {
private var wxApi: IWXAPI? = null
private var channel: MethodChannel? = null
fun shareText(call: MethodCall) {
fun apiIsNull() = wxApi == null
fun setMethodChannel(channel: MethodChannel) {
this.channel = channel
}
fun setWxApi(wxApi: IWXAPI) {
this.wxApi = wxApi
}
fun handle(call: MethodCall, result: MethodChannel.Result) {
when (call.method) {
WeChatPluginMethods.SHARE_TEXT -> {
shareText(call)
}
else -> {
result.notImplemented()
}
}
}
private fun shareText(call: MethodCall) {
val textObj = WXTextObject()
textObj.text = call.argument(WechatPluginConfig.TEXT)
......@@ -34,21 +59,54 @@ object WechatPluginHandler {
}
fun onResp(resp: BaseResp) {
var result = 0
var code =-99
// val ERR_OK = 0
// val ERR_COMM = -1
// val ERR_USER_CANCEL = -2
// val ERR_SENT_FAILED = -3
// val ERR_AUTH_DENIED = -4
// val ERR_UNSUPPORT = -5
// val ERR_BAN = -6
when (resp.errCode) {
BaseResp.ErrCode.ERR_OK -> {
code = 0
}
BaseResp.ErrCode.ERR_COMM -> {
code = 1
}
BaseResp.ErrCode.ERR_USER_CANCEL -> {
code = 2
}
BaseResp.ErrCode.ERR_SENT_FAILED -> {
code = -3
}
BaseResp.ErrCode.ERR_AUTH_DENIED -> {
code = -4
}
BaseResp.ErrCode.ERR_UNSUPPORT -> {
code = -5
}
else -> {
else -> {
}
}
val result = mapOf(
"errStr" to resp.errStr,
"transaction" to resp.transaction,
"type" to resp.type,
"errCode" to code,
"openId" to resp.openId
)
channel?.invokeMethod(WeChatPluginMethods.WE_CHAT_RESPONSE, result)
}
private fun getScene(value: String) = when (value) {
......@@ -58,4 +116,6 @@ object WechatPluginHandler {
else -> SendMessageToWX.Req.WXSceneTimeline
}
}
\ No newline at end of file
class WeChatResponseCode {
static const int ERR_OK = 0;
static const int ERR_COMM = -1;
static const int ERR_USER_CANCEL = -2;
static const int ERR_SENT_FAILED = -3;
static const int ERR_AUTH_DENIED = -4;
static const int ERR_UNSUPPORTED = -5;
static const int ERR_BAN = -6;
}
......@@ -7,6 +7,21 @@ class WechatPlugin {
static const MethodChannel _channel =
const MethodChannel('wechat_plugin');
static StreamController<Map> _responseStreamController = new StreamController.broadcast();
static Stream<Map> get weChatResponseUpdate=>_responseStreamController.stream;
static Future<int> init(String appId) async{
return await _channel.invokeMethod("initWeChat");
}
static void listen(){
_channel.setMethodCallHandler(_handler);
}
static void dispose(){
_responseStreamController.close();
}
static Future<String> get platformVersion async {
final String version = await _channel.invokeMethod('getPlatformVersion');
return version;
......@@ -15,4 +30,13 @@ class WechatPlugin {
static Future shareText(WeChatShareTextModel model) async{
return await _channel.invokeMethod("shareText",model.toMap());
}
static Future<dynamic> _handler(MethodCall methodCall){
if("onWeChatResponse" == methodCall.method){
_responseStreamController.add(methodCall.arguments);
}
return Future.value(true);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论