CocosCreator + nodeJs 课程8 安卓接入微信登录之友盟接入

我们使用友盟提供的第三方功能来实现微信登录功能。大家注册一个友盟账号来下载需要的内容(该内容可以点击此处免费下载)。以下内容以Android版本为例。

集成工具
1、打开上述下载的集成包,然后点击“友盟集成工具.jar”包
在这里插入图片描述
2、选择 “微信精简版” 和 “AndroidStudio” 选项,并点击OK。在这里插入图片描述
3、上述操作之后,会生成一个“umeng_integratetool_result”文件夹。这就是我们所需的导入文件。

在这里插入图片描述
导入工程
1、用AndroidStudio工具打开工程项目,右键点击"res / Reveal in finder"。
在这里插入图片描述
2、跳转窗口会自动转至文件所在的文件夹,包含的内容如下图。
在这里插入图片描述
3、将“umeng_integratetool_result”文件夹下的内容拷贝到上述文件夹中(注意:拷贝过程中,不要点击替换,要点击合并)。之后,我们就可以在AndroidStudio工程中发现多了个"jniLibs"文件。

4、选中“jniLibs ”文件下的所有文件,并右键点击,选择“ Add as Library”。之后AndroidStudio会进行一系列的导入工作,我们只需耐心等耐即可。

5、导入成功之后,找到项目中的"AndroidManifest.xml",并在合适位置加入以下代码,注意示图中标红框的内容。

<activity
            android:name="wxapi.WXEntryActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar">
 </activity>

在这里插入图片描述
6、接下来我们编写一个UmengManager.java文件,封装了一个友盟第三方调用的方法。

package com.tongfei.umeng;  //注意:此包名填写你自己wxapi所在的包名

import com.umeng.socialize.Config;
import com.umeng.socialize.PlatformConfig;
import com.umeng.socialize.ShareAction;
import com.umeng.socialize.UMAuthListener;
import com.umeng.socialize.UMShareAPI;
import com.umeng.socialize.UMShareListener;
import com.umeng.socialize.bean.SHARE_MEDIA;
import com.umeng.socialize.media.UMImage;
import com.umeng.socialize.media.UMWeb;
import org.cocos2dx.javascript.AppActivity;
import org.cocos2dx.lib.Cocos2dxJavascriptJavaBridge;
import java.util.HashMap;
import java.util.Map;

//cocos里重载UmengManager的一些回调方法即可
public class UmengManager {
    public static AppActivity g_Activity = null;
    public static void init(AppActivity activity) {
        g_Activity = activity;
        UMShareAPI.get(g_Activity);
        Config.isJumptoAppStore = true;
    }
    public static void setWeixinPlatForm(String appID,String screatID){
        PlatformConfig.setWeixin(appID, screatID);
    }
    
    //判断微信是否登录
    public static boolean isWeixinInstalled(String placeHolder){
        return true;
    }
    public static void weixinLogin(String placeHolder) {
        g_Activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                UMShareAPI mShareAPI = UMShareAPI.get(g_Activity);
                //mShareAPI.doOauthVerify(g_Activity, SHARE_MEDIA.WEIXIN, umAuthListener);
                mShareAPI.getPlatformInfo(g_Activity, SHARE_MEDIA.WEIXIN, platformListener);
            }
        });
    }

    public  static void weixinFrendShareImage(final String localImageUrl){
        g_Activity.runOnGLThread(new Runnable() {
            @Override
            public void run() {
                final String finalimageUrl = localImageUrl;
                UMImage image = new UMImage(g_Activity, finalimageUrl);//网络图片
                new ShareAction(g_Activity).setPlatform(SHARE_MEDIA.WEIXIN)
                        .withMedia(image)
                        .setCallback(umShareListener)
                        .share();
            }
        });
    }

    public static void weixinShare(final String title, String desc, String imageUrl, String webUrl){//微信分享
        final String finalTitle = title;
        final String finaldesc = desc;
        final String finalimageUrl = imageUrl;
        final String finalwebUrl = webUrl;

        g_Activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                UMImage thumb = new UMImage(g_Activity, finalimageUrl);//网络图片
                thumb.setDescription(finaldesc);
                UMWeb web = new UMWeb(finalwebUrl);//网络图片
                web.setThumb(thumb);
                web.setTitle(finalTitle);
                web.setDescription(finaldesc);
                new ShareAction(g_Activity).setPlatform(SHARE_MEDIA.WEIXIN_CIRCLE)
                        .withMedia(web)
                        .setCallback(umShareListener)
                        .share();
            }
        });
    }

    public static void weixinFriendShare(String title,String desc,String imageUrl,String webUrl){//微信好友分享
        final String finalTitle = title;
        final String finaldesc = desc;
        final String finalimageUrl = imageUrl;
        final String finalwebUrl = webUrl;

        g_Activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                UMImage thumb = new UMImage(g_Activity, finalimageUrl);//网络图片
                thumb.setDescription(finaldesc);
                UMWeb web = new UMWeb(finalwebUrl);//网络图片
                web.setThumb(thumb);
                web.setTitle(finalTitle);
                web.setDescription(finaldesc);
                new ShareAction(g_Activity).setPlatform(SHARE_MEDIA.WEIXIN)
                        .withMedia(web)
                        .setCallback(umShareListener)
                        .share();
            }
        });
    }

    public static void notifyLoginSuccess(Map<String, String> info) {
        int isOK = info == null?0:1;
        if(isOK == 0){
            info = new HashMap();
        }
        final String successMsg = String.format("var UmengNative = require(\'UmengNative\'); UmengNative.weixinLoginSuccess(%s,\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\');",isOK,info.get("openid"), info.get("unionid"),
                info.get("access_token"), info.get("refresh_token"), info.get("expires_in"), info.get("screen_name"), info.get("city"), info.get("prvinice"),
                info.get("country"), info.get("gender"), info.get("profile_image_url"));

        g_Activity.runOnGLThread(new Runnable() {
            @Override
            public void run() {
                Cocos2dxJavascriptJavaBridge.evalString(successMsg);
            }
        });
    }

    public static void notifyShareFinish(int isOK){
        final String successMsg = String.format("var UmengNative = require(\'UmengNative\'); UmengNative.weixinShareSuccess(%d);",isOK);
        g_Activity.runOnGLThread(new Runnable() {
            @Override
            public void run() {
                Cocos2dxJavascriptJavaBridge.evalString(successMsg);
            }
        });
    }

    private static UMShareListener umShareListener = new UMShareListener() {
        @Override
        public void onStart(SHARE_MEDIA share_media) {

        }

        @Override
        public void onResult(SHARE_MEDIA platform) {
            //Log.d("plat","platform"+platform);

            //Toast.makeText(g_Activity, platform + " 分享成功啦", Toast.LENGTH_SHORT).show();
            notifyShareFinish(1);

        }

        @Override
        public void onError(SHARE_MEDIA platform, Throwable t) {
            //Toast.makeText(g_Activity,platform + " 分享失败啦", Toast.LENGTH_SHORT).show();
            if(t!=null){
                //Log.d("throw","throw:"+t.getMessage());
            }
            //notifyShareFinish(0);
        }

        @Override
        public void onCancel(SHARE_MEDIA platform) {
            //Toast.makeText(g_Activity,platform + " 分享取消了", Toast.LENGTH_SHORT).show();
            //notifyShareFinish(0);
        }
    };

    private static UMAuthListener platformListener = new UMAuthListener() {
        @Override
        public void onStart(SHARE_MEDIA share_media) {

        }

        @Override
        public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
            //Toast.makeText(g_Activity, "getInfo succeed", Toast.LENGTH_SHORT).show();
            notifyLoginSuccess(data);
        }

        @Override
        public void onError(SHARE_MEDIA platform, int action, Throwable t) {
            //Toast.makeText( g_Activity, "Authorize fail", Toast.LENGTH_SHORT).show();
            notifyLoginSuccess(null);
        }

        @Override
        public void onCancel(SHARE_MEDIA platform, int action) {
            //Toast.makeText( g_Activity, "Authorize cancel", Toast.LENGTH_SHORT).show();
            notifyLoginSuccess(null);
        }
    };
}

7、回到AndroidStudio项目工程中,右键点击java文件夹,并选择Reveal in finder。将第6条的.java文件拷贝到wxapi的同级目录。

8、之后,我们在"org.cocos2dx.javascript"包下的AppActivity文件中编写内容。在onCreate方法中添加代码,整体内容如下:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (!isTaskRoot()) {
            return;
        }
        UmengManager.init(this);
        UmengManager.setWeixinPlatForm("自己的appID", " 自己的签名");
        SDKWrapper.getInstance().init(this);
    }

9、之后再项目工程中,打开"Cradle Scripts / build.gradle(Module:项目名)",其中有个签名signingConfigs配置数据。

signingConfigs {
       release {
            if (project.hasProperty("RELEASE_STORE_FILE")) {
                storeFile file(RELEASE_STORE_FILE)
                storePassword RELEASE_STORE_PASSWORD
                keyAlias RELEASE_KEY_ALIAS
                keyPassword RELEASE_KEY_PASSWORD
            }
           storeFile file('自己的keyStore文件路径')
           storePassword '自己设置的密码'
           keyAlias '自己的kayAlias'
           keyPassword '自己设置的密码'
        }
        debug{
            storeFile file('自己的keyStore文件路径')
          	storePassword '自己设置的密码'
           	keyAlias '自己的kayAlias'
           	keyPassword '自己设置的密码'
        }
    }

添加友盟AppKey
1、在AndroidManifest.xml文件中加入下图中的代码。
在这里插入图片描述
2、在AppActivity文件中的onActivityResult方法中,加入下行代码。

UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);

整体布局如图所示:
在这里插入图片描述
到此,Android的配置工作已经完成,接下来进行Creator 的开发过程。

Creator调用友盟
1、在登录脚本中引入头文件

var UmengNative = require('UmengNative')

2、在点击登录事件中,调用友盟接口,如果调用成功,loginData 会是一个Object类型。

UmengNative.weixinLogin( function (loginData) {
                   
 })
补充

如果要修改logo,需要将下图所示的内容替换掉。在这里插入图片描述
如果想换个包的文件名,需要修改下图所示的内容。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值