• 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

    最后,有问题找我

  • 相关阅读:
    ubuntu11.04解决root不能登录的问题
    应用C预处理命令
    WINCE6.0在控制面板添加控制面板应用程序
    嵌入式系统开发
    WINCE6.0下开始菜单的“挂起(suspend)”是否可见及阻止系统进入睡眠模式
    WINCE6.0更换桌面壁纸和图标
    ubuntun_11.04安装
    WINCE开发更安全可靠设备驱动的最佳实践
    WINCE源代码配置文件
    TS2003基于触摸屏的应用
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7366147.html
Copyright © 2020-2023  润新知