phonegap(cordova) 自定义插件代码篇(五)----android ,iOS 集成微信登陆

统一登陆还是很有必要的,安全,放心,代码

/*cordov 微信自定义插件*/
(function (cordova) {
    var define = cordova.define;

    define("cordova/plugin/wx", function (require, exports, module) {
        var argscheck = require('cordova/argscheck'),
	    exec = require('cordova/exec');
        exports.send_webpage = function (content, successCB, failCB) { 
            /*
            content 数组   0--url  1--title  2--description
                           3--分享目的地(0--选择好友对话框 1--我的朋友圈 2--我的收藏)

            */
            argscheck.checkArgs('AFF', 'wx.send_webpage', arguments);
            if (!content) {
                failCB && failCB("请输入网页信息");
            } else {
                exec(successCB, failCB, "WX", "send_webpage", content);
            }
        };
        exports.send_img = function (content, successCB, failCB) {
            argscheck.checkArgs('AFF', 'wx.send_img', arguments);
            if (!content) {
                failCB && failCB("请输入图片信息");
            } else {
                exec(successCB, failCB, "WX", "send_img", content);
            }
        };
        exports.wxlogin = function (content, successCB, failCB) {
            argscheck.checkArgs('AFF', 'wx.wxlogin', arguments);
            if (!content) {
                failCB && failCB("参数错误");
            } else {
                exec(successCB, failCB, "WX", "wxlogin", content);
            }
        };
        exports.checkwx = function (content, successCB, failCB) {
            argscheck.checkArgs('AFF', 'wx.checkwx', arguments);
            if (!content) {
                failCB && failCB("参数错误");
            } else {
                exec(successCB, failCB, "WX", "checkwx", content);
            }
        };
        exports.checkQQ = function (content, successCB, failCB) {
            argscheck.checkArgs('AFF', 'wx.checkQQ', arguments);
            if (!content) {
                failCB && failCB("参数错误");
            } else {
                exec(successCB, failCB, "WX", "checkQQ", content);
            }
        };
        exports.checkSina = function (content, successCB, failCB) {
            argscheck.checkArgs('AFF', 'wx.checkSina', arguments);
            if (!content) {
                failCB && failCB("参数错误");
            } else {
                exec(successCB, failCB, "WX", "checkSina", content);
            }
        };
    });
    cordova.addConstructor(function () {
        if (!window.plugins) {
            window.plugins = {};
        }
        console.log("将插件注入cordovawx...");
        window.plugins.wx = cordova.require("cordova/plugin/wx");
        console.log("wx注入结果:" + typeof (window.plugins.wx)); 
    });
})(cordova);
android 

public class WXPlugin extends CordovaPlugin {
	@Override
	public boolean execute(String action, JSONArray args,
			CallbackContext callbackContext) throws JSONException {

		// 分享url
		if ("send_webpage".equals(action)) {
			WXWebpageObject webpage = new WXWebpageObject();
			// url
			String webpageUrl = args.getString(0);
			webpage.webpageUrl = webpageUrl;
			WXMediaMessage msg = new WXMediaMessage(webpage);
			// 标题
			String title = args.getString(1);
			msg.title = title;
			// 描述
			String description = args.getString(2);
			msg.description = description;
			// Bitmap thumb = BitmapFactory.decodeResource(getResources(),
			// R.drawable.send_music_thumb);
			// msg.thumbData = Util.bmpToByteArray(thumb, true);
			//
			SendMessageToWX.Req req = new SendMessageToWX.Req();
			req.transaction = buildTransaction("webpage");
			req.message = msg;
			// 0--选择好友对话框 1--我的朋友圈 2--我的收藏
			int scene = args.getInt(3);
			// isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline :
			// SendMessageToWX.Req.WXSceneSession;
			req.scene = scene;
			Constants.api.sendReq(req); 
			callbackContext.success();
			return true;

		} else if ("wxlogin".equals(action)) {
			boolean isInstallWX = Constants.api.isWXAppInstalled();
			if (isInstallWX) {
				// send oauth request
				SendAuth.Req req = new SendAuth.Req();
				// req.openId = Constants.APP_ID;
				req.scope = "snsapi_userinfo";
				req.state = "wechat_zzy";
				Constants.api.sendReq(req);
				callbackContext.success();
				return true;
			}else{ 
				String jsCode = "appCallBack.noInstallWX()";
				yooshow.instance.ToJS(jsCode);
				callbackContext.success();
				return true;
			}
		}else if ("checkwx".equals(action)) {
			boolean isInstallWX = Constants.api.isWXAppInstalled();
			if (isInstallWX) { 
				callbackContext.success();
				return true;
			}else{ 
				String jsCode = "appCallBack.checkWXInstall()";
				yooshow.instance.ToJS(jsCode);
				callbackContext.success();
				return true;
			}
		}  else if ("send_img".equals(action)) { // 分享img
			return true;
		} else {
			return false;
		}
	}

	private String buildTransaction(final String type) {
		return (type == null) ? String.valueOf(System.currentTimeMillis())
				: type + System.currentTimeMillis();
	}
}


public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
	  
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		Constants.api.handleIntent(getIntent(), this);
	}

	@Override
	protected void onNewIntent(Intent intent) {
		super.onNewIntent(intent);
		setIntent(intent);
		Constants.api.handleIntent(getIntent(), this);
	}
 
 

	@Override
	public void onReq(BaseReq arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void onResp(BaseResp resp) {
		// TODO Auto-generated method stub
		if(resp.getType()==ConstantsAPI.COMMAND_SENDAUTH){
			String result = "0"; 
			switch (resp.errCode) {
			case BaseResp.ErrCode.ERR_OK:
				result = "ok";
				String code = ((SendAuth.Resp)resp).code; 
				//同意授权之后
				String jsCode = "appCallBack.wxLogin('"+code+"')";
				yooshow.instance.ToJS(jsCode);
				break;
			case BaseResp.ErrCode.ERR_USER_CANCEL:
				result = "cancel";
				break;
			case BaseResp.ErrCode.ERR_AUTH_DENIED:
				result = "denied";
				break;
			default:
				result = "unknown";
				break;
			} 
			
		} else if(resp.getType()==ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX){
			String result = "0"; 
			switch (resp.errCode) {
			case BaseResp.ErrCode.ERR_OK:
				result = "ok";
				boolean flag = ((SendMessageToWX.Resp)resp).checkArgs();
				if(flag){ 
					String jsCode = "appCallBack.wxShareSuccess()";
					yooshow.instance.ToJS(jsCode);	
				}
				
				break;
			case BaseResp.ErrCode.ERR_USER_CANCEL:
				result = "cancel";
				break;
			case BaseResp.ErrCode.ERR_AUTH_DENIED:
				result = "denied";
				break;
			default:
				result = "unknown";
				break;
			} 
			
		} 
		finish();
	}
}

<activity
            android:name="注意包名!!!.WXEntryActivity"
            android:exported="true"
            android:label="@string/app_name"
            android:launchMode="singleTop"
            android:theme="@android:style/Theme.Translucent" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />

                <data android:scheme="sdksample" />
            </intent-filter>
        </activity>
iOS
#import <UIKit/UIKit.h>
#import <Cordova/CDV.h>
#import "WXApiObject.h"

@interface CDVWX : CDVPlugin

@property (nonatomic,copy) NSString*callbackID;
//Instance Method
-(void) send_webpage:(CDVInvokedUrlCommand*)command ;
-(void) send_img:(CDVInvokedUrlCommand*)command ;
 -(void) checkwx:(CDVInvokedUrlCommand*)command ;
-(void) wxlogin:(CDVInvokedUrlCommand*)command ;
 -(void) checkQQ:(CDVInvokedUrlCommand*)command ;
 -(void) checkSina:(CDVInvokedUrlCommand*)command ;
@end

#import "CDVWX.h"
#import "WXApi.h"
#import "AppDelegate.h"
#import "QQConnection/ISSQQApp.h"
#import <ShareSDK/ShareSDK.h>
#import <SinaWeiboConnection/ISSSinaWeiboApp.h>
#import "TencentOpenAPI/QQApiInterface.h"
#import <TencentOpenAPI/TencentOAuth.h>
@implementation CDVWX
@synthesize callbackID;
-(void)send_webpage:(CDVInvokedUrlCommand *)command

{
    WXMediaMessage *message = [WXMediaMessage message];
    //url
    NSString* webpageUrl = [command.arguments objectAtIndex:0];
    WXWebpageObject *ext = [WXWebpageObject object];
    ext.webpageUrl = webpageUrl;
    message.mediaObject = ext;
    //title
    NSString* title = [command.arguments objectAtIndex:1];
    message.title =title;
    //description
    NSString* description = [command.arguments objectAtIndex:2];
    message.description = description;
    
    SendMessageToWXReq* req = [[SendMessageToWXReq alloc] init];
    req.bText = NO;
    req.message = message;
//(0--选择好友对话框 1--我的朋友圈 2--我的收藏)
//    int scene = [command.arguments objectAtIndex:3];
    
    int scene =[(NSNumber *)[command.arguments  objectAtIndex:3] intValue];
    req.scene = scene;
    NSLog(@"fenxiang >>>>>> %@", title);
    
    NSLog(@"fenxiang >>>>>> %D", scene);
//    [WXApi sendReq:req];
    [[AppDelegate appDelegate] sendLinkContent:req];
 

    
    CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:@""];
    [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}
-(void)send_img:(CDVInvokedUrlCommand *)command
{
     
    
    CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:@""];
    [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}
-(void)checkwx:(CDVInvokedUrlCommand *)command
{
    BOOL isInstallWX = [WXApi isWXAppInstalled];
    if(isInstallWX){
        
    }else{
        NSString *js =  @"appCallBack.checkWXInstall()";
        [[AppDelegate appDelegate] runJS:js];
    }

    
    CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:@""];
    [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}
-(void)checkQQ:(CDVInvokedUrlCommand *)command
{
//    id<ISSQQApp> appttt = (id<ISSQQApp>)[ShareSDK getClientIconWithType:ShareTypeQQSpace];
//  
//     BOOL isInstall = [appttt  isClientInstalled ];
//    BOOL isInstall = [QQApiInterface isQQInstalled];
//     NSLog(@"qq >>>>>> %@", isInstall?@"yes":@"no");
    if([QQApiInterface isQQInstalled]){
        
    }else{
        NSLog(@"未安装");
        NSString *js =  @"appCallBack.checkQQInstall()";
        [[AppDelegate appDelegate] runJS:js];
    }
    
    
    CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:@""];
    [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}
-(void)checkSina:(CDVInvokedUrlCommand *)command
{
//    id<ISSSinaWeiboApp> temp = (id<ISSSinaWeiboApp>)[ShareSDK getClientIconWithType:ShareTypeSinaWeibo];
//    
//    BOOL isInstall = [temp isClientInstalled];
//    if(isInstall){
//        
//    }else{
//        NSString *js =  @"appCallBack.checkSinaInstall()";
//        [[AppDelegate appDelegate] runJS:js];
//    }
    
    
    CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:@""];
    [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}
-(void)wxlogin:(CDVInvokedUrlCommand *)command
{
    SendAuthReq* req = [[[SendAuthReq alloc] init] autorelease];
    req.scope = @"snsapi_userinfo";
    req.state = @"wechat_zzy";
    
        [WXApi sendReq:req];
    
    CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:@""];
    [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}

@end
didFinishLaunchingWithOptions方法中

    //向微信注册
    [WXApi registerApp:WX_ID];


-(void) onResp:(BaseResp*)resp
{
 
    if([resp isKindOfClass:[SendAuthResp class]]){
        SendAuthResp * aresp = (SendAuthResp *) resp;
        if(aresp.errCode==0){
            NSString* code=  aresp.code;
            NSString *js =  [[NSString alloc]initWithFormat:@"appCallBack.wxLogin('%@')", code  ];
            [[AppDelegate appDelegate] runJS:js];

        }
    }else if ([resp isKindOfClass:[SendMessageToWXResp class]]){
        SendMessageToWXResp * smtwxResp = (SendMessageToWXResp *) resp;
        if(smtwxResp.errCode==0){
            NSString *js =  [[NSString alloc]initWithFormat:@"appCallBack.wxShareSuccess()"];
            [[AppDelegate appDelegate] runJS:js];

        }
    }else if ([resp isKindOfClass:[SendMessageToQQResp class]]){
        SendMessageToQQResp * smtwxResp = (SendMessageToQQResp *) resp;
       
            NSString *js =  [[NSString alloc]initWithFormat:@"appCallBack.qqShareSuccess()"];
            [[AppDelegate appDelegate] runJS:js];
            
    }


}

handleOpenURL方法中

   [WXApi handleOpenURL:url delegate:self];
    return  YES;



iOS 中别忘添加 URL Types

最后,有问题找我

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值