cocos creator利用ShareSDK实现微信登录功能

首先在ShareSDK官网下载SDK或者在android studio中配置build.gradle.

ShareSDK Maven集成文档

注:使用ShareSDK maven集成方式,不需要在AndroidMainfest.xml下面配置任何权限和Activity

注意:需要先申请Mob的appkey与appsecret请点击这里查看

一、配置gradle

1、打开项目根目录的build.gradle,在buildscrip–>dependencies 模块下面添加  classpath ‘com.mob.sdk:MobSDK:+’,如下所示;

2、在使用到Mob产品的module下面的build.gradle文件里面添加引用

3、然后添加MobSDK方法,配置mob的key和秘钥 (与第三步是一个gradle中;注意:MobSDK方法是配置到文件根目录,与android并列,不要配置到android里面哦)

如果还没有key的,申请Mob的appkey与appsecret请点击这里查看
Onekeyshare是ShareSDK的GUI界面,如果不需要,则需要添加”gui false”,因为默认是使用gui,version字段为SDK的版本号,不设置则使用最新的版本;

4、maven集成方式可以在Mob产品的module下面的build.gradle文件里面配置ShareSDK各个社交平台的key信息

其中的devInfo为来自社交平台的应用信息。

注:如果您没有在AndroidManifest中设置appliaction的类名,MobSDK会将这个设置为com.mob.MobApplication,但如果您设置了,请在您自己的Application类中调用:

并且在Manifest清单文件中配置:tools:replace=”android:name”,如下所示:

二、配置字段说明

配置支持的平台全部属性字段有以下这些(注:区分大小写):

id 数字,平台的id,可以设置为任何不重复的数字,(可选字段)
sortId 数字,九宫格界面平台的排序,越小越靠前,可以设置为任何不重复的数字,(可选字段)
appId 文本,对应ShareSDK.xml中的AppId、ClientID、ApplicationId、ChannelID
appKey 文本,对应ShareSDK.xml中的AppKey、ConsumerKey、ApiKey、OAuthConsumerKey
appSecret 文本,对应ShareSDK.xml中的AppSecret、ConsumerSecret、SecretKey、Secret、ClientSecret、ApiSecret、ChannelSecret
callbackUri 文本,对应ShareSDK.xml中的RedirectUrl、RedirectUri、CallbackUrl
shareByAppClient 布尔值,shareByAppClient标识是否使用客户端分享
bypassApproval 布尔值,bypassApproval表示是否绕过审核
enable 布尔值,enable字段表示此平台是否启用
userName 文本,userName在微信小程序中使用
path 文本,path在微信小程序中使用
hostType 文本,表示服务器类型,在YouDao和Evernote中使用
withShareTicket 布尔值,分享微信小程序时,分享出去的小程序被二次打开时可以获取到更多信息,true为能获取,反之不能;仅在微信中使用
miniprogramType 数字,分享微信小程序时,表示小程序的开发状态,取值范围:0-正式,1-开发,2-体验,仅在微信中使用

 

配置完以上信息后同步(sync)一下代码就可以调用相关的接口了

 

三、添加代码

1、初始化MobSDK

如果您没有在AndroidManifest中设置appliaction的类名,MobSDK会将这个设置为com.mob.MobApplication,但如果您设置了,请在您自己的Application类中调用:

以初始化MobSDK。

添加配置后,即可调用授权、获取资料、分享等操作,如一键分享的代码:

四、混淆设置

ShareSDK已经做了混淆处理,再次混淆会导致不可预期的错误,请在您的混淆脚本中添加如下的配置,跳过对ShareSDK的混淆操作:

五、可用的社交平台

任何配置在devInfo下的社交平台都是可用的,他们包括:

分类 平台名称
常用平台 SinaWeibo(新浪微博)、Wechat(微信好友)、WechatMoments(微信朋友圈)、QQ(QQ好友)、Facebook、FacebookMessenger
其它主流平台 TencentWeibo(腾讯微博)、QZone(QQ空间)、Renren(人人网)、Twitter、Douban(豆瓣)、Tumblr、GooglePlus(Google+)、Pinterest、Line、Instagram、Alipay(支付宝好友)、AlipayMoments(支付宝朋友动态)、Youtube、Meipai(美拍)
其它平台 WechatFavorite(微信收藏)、KaiXin(开心网)、Email(电子邮件)、ShortMessage(短信)、YouDao(有道云笔记)、Evernote(印象笔记)、LinkedIn(领英)、FourSquare、Flickr、Dropbox、VKontakte、Yixin(易信)、YixinMoments(易信朋友圈)、Mingdao(明道)、KakaoTalk、KakaoStory、WhatsApp、Pocket、Instapaper、Dingding(钉钉)、Telegram

 

六、注意事项

1. ShareSDK默认会添加OnekeyShare库,如果您不需要这个库,可以在ShareSDK下设置“gui false”来关闭OnekeyShare
2. MobSDK默认为ShareSDK提供最新版本的集成,如果您想锁定某个版本,可以在ShareSDK下设置“version “某个版本””来固定使用这个版本
3. 如果使用MobSDK的模块会被其它模块依赖,请确保依赖它的模块也引入MobSDK插件,或在此模块的gradle中添加:

六、对微信的第三方登录说明

Demo:wechatlogin  此demo中有打包需要的keystore,密码是123456,微信登录需要正式打包签名测试

1、首先要把资源和微信的jar包复制到工程中,保证微信的开放平台的登录的权限一定要审核通过;

weixin01

2、添加授权代码

3、申请key后替换sharesdk.xml默认的key

 

4、配置Manifest文件,配置sharesdk和配置微信回调

 

cocos creator js端代码:

//微信登录
     weChatLogin : function(){
         //微信登录
         jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity","weChatLogin","()V");
         this.schedule(function(){
            var wxLoginSuccess = jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity","wxLoginIsSuccess","()Z");
            console.log("is success " + wxLoginSuccess);
            if(wxLoginSuccess){
                console.log("2222222222222222222222222222");
                //获得授权信息
                var autoInfo = jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity","getWxAutoMessage","()Ljava/lang/String;");
                var jsonInfo = JSON.parse(autoInfo);
                console.log("jsonInfo is " + jsonInfo);
                console.log("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" + autoInfo);
                //如果登录成功的话将授权信息发送给后端
                console.log("autoInfo is " + autoInfo);
                //关闭所有计数器
                this.unscheduleAllCallbacks(); 
                if(autoInfo != ""){
                    this.sendRequestToWXServer(autoInfo);
                }
                
            }
         },0.5);
     },

 anduoid端实现细节:

 首先在oncreate函数里面 先初始化微信即授权登录

Platform wechat= ShareSDK.getPlatform(Wechat.NAME);

/**
     *
     * 微信登录
     *
     * */
    public static void weChatLogin(){
        System.out.println("________________________");
        //设置微信授权相关信息
        wechat.setPlatformActionListener(new PlatformActionListener() {
            @Override
            public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
                app.wxAutoMessage = platform.getDb().exportData();
                //微信登录成功
                app.isWxLoginSuccess = true;
                Toast.makeText(AppActivity.app, "登录成功", Toast.LENGTH_SHORT).show();
                System.out.println(app.wxAutoMessage);
                System.out.println("--------------<<<<<<<<<<<<<<<<<<<----------------");
            }
            @Override
            public void onError(Platform platform, int i, Throwable throwable) {
                throwable.printStackTrace();
            }
            @Override
            public void onCancel(Platform platform, int i) {
                System.out.println("已经取消操作");
            }
        });
        wechat.authorize();
        Platform wechatPlatform = ShareSDK.getPlatform(Wechat.NAME);
        System.out.println("<<<<---------------->>>>wechatPlatFrom is " + wechatPlatform);
    }
    public static boolean wxLoginIsSuccess(){
        System.out.println("微信是否登录成功:" + app.isWxLoginSuccess);
        return app.isWxLoginSuccess;
    }
    public static String getWxAutoMessage(){
        System.out.println("微信认证信息是:" + app.wxAutoMessage);
        return app.wxAutoMessage;
    }

这样我们可以把授权信息传给服务器去做验证:

然后再通过refresh_token获取到openid和access_token

通过js请求的方式:网址是:https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

js方法如下:

//获取access_token和openid等信息并将这些信息传给服务端
    getCode : function(refreshToken){
        var self = this;
        var url = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=wx72f9006d0b1d9b7f&grant_type=refresh_token&refresh_token='+refreshToken;
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function(){
            if(xhr.readyState === 4 && (xhr.status >= 200 && xhr.status < 400)){
                self.weixinResponse = xhr.responseText;
                console.log("in getCode response is " + self.weixinResponse);
                //将数据放回出去
                self.sendToSeverOfWechat(self.weixinResponse);
            }
        }
        xhr.open("POST",url);
        xhr.send();
    },



猜你喜欢

转载自blog.csdn.net/lck8989/article/details/80322329