unity3d接入第三方sdk_unity 第三方sdk接入流程 - CSDN
  • 转自:http://blog.csdn.net/smlisi2/article/details/8782619 ... 本文以UNITY3D接入91SDK的过程为例。 我的开发环境: MAC系统, ECLIPSE, UNITY4.0 开发过程: 1.准备要UNITY为交互Andr

    转自:http://blog.csdn.net/smlisi2/article/details/8782619

    参考1:http://www.xiaobao1993.com/383.html

    参考2:http://www.xifarm.com/unity3d_androidsdk/

    参考3:  http://bbs.18183.com/thread-149758-1-1.html


    本文以UNITY3D接入91SDK的过程为例。


    我的开发环境: MAC系统, ECLIPSE, UNITY4.0


    开发过程:

    1.准备要UNITY为交互Android自备的CLASS.JAR文件。
       我的操作过程是:应用程序->UNTITY文件夹->UNITY->右键:显示包内容->CONTENTS文件夹->PLAYBACKENGINES文件夹->AndroidPlayer文件夹->BIN文件夹->CLASS.JAR【目录:/Applications/Unity/Unity.app/Contents/PlaybackEngines/AndroidPlayer/bin】复制出来备用。

    2.新建Android项目,把CLASS.JAR复制到项目libs文件夹中,将91SDK的NdComPlatform.jar也复制到libs文件夹中,(设置Java Build Path),将 MainActivity extends UnityPlayerActivity ,将需要调用的安卓SDK方法写好。AndroidManifest.xml根据91SDK的要求进行配置。Android项目中不需要引入91SDK的RES文件。


    3.然后,在项目上右键RUN AS->Android APPLICATION。进入项目目录->bin文件夹->classes文件夹->复制里面所有的文件粘贴到一个好找的目录中,如JARU3D这个文件夹中。


    4打开终端,进入UARU3D这个文件夹,输入:jar -cvf myclass.jar *  回车,JARU3D文件夹中将多出:myclass.jar, 该文件做备用。

    PS: 在android项目工程中,bin目录下也能找到对应的jar文件。


    5.打开UNITY3D4.0,创建新UNITY项目后,在ASSETS文件夹下新建文件夹Plugins,在Plugins文件夹中新建Android文件夹,在Android文件夹中新建bin文件夹和libs文件夹,将myclass.jar复制到bin文件夹中,将91SDK的NdComPlatform.jar复制到libs文件夹中,将91SDK的res文件夹全部复制到Android文件夹中,将Android项目的AndroidManifest.xml复制到ANDORID文件夹下,把Android项目中的资源按照对应的文件夹复制到UNITY项目RES文件夹的对应文件夹内。

    在ASSETS文件夹中创建UNITY调用Android的文件,将该文件拖动到MAIN CAMERA放开鼠标进行绑定。



    6.UNITY打包为APK安装包进行DEMO效果测试。注意PLAYERSETTINGS配置中BUNDLE IDENTIFIER要和Android项目的package相同。

    展开全文
  • 1、一般第三方SDK都会有一个暴露给接入方(即Unity3D)的一个接口类,该类中包含了一些SDK功能的各个调用方法,例如下面这个SDK接口类中包含了初始化、登录、登出三个功能的接入类,里面的每个方法跟参数都加了注释...

    一、本例子中使用的Android Studio为3.2.0版本,Unity为2018.3.12版本

    二、Unity3D调用SDK

    1、一般第三方SDK都会有一个暴露给接入方(即Unity3D)的一个接口类,该类中包含了一些SDK功能的各个调用方法,例如下面这个SDK接口类中包含了初始化、登录、登出三个功能的接入类,里面的每个方法跟参数都加了注释;

    先看SDK库工程目录,mysdk是SDK库工程,app是一个依赖于SDK库工程的demo,其中只有一个MainActivity类,便于开发时进行测试,mysdk中只有一个MySDkPlatform类,这个类就是unity接入需要调用的接口类;

            

    /**
     * 类说明:unity接入SDK的接口类
     */
    public class MySDkPlatform {
        
        private static String gameObjectName;//unity传过来的接收SDK回调的类名,SDK根据此类名调用unity类中的方法
        private static String unityInitCallbackName;//unity传过来的接收SDK回调的类中的方法,SDK根据此方法名调用unity中的方法
        private String unityLoginCallbackName;//同上
        private String unityLogoutCallbackName;//同上
        
        //单例模式
        public static MySDkPlatform mySDkPlatform;
        public static MySDkPlatform getInstance(){
            if (mySDkPlatform == null) {
                mySDkPlatform = new MySDkPlatform();
            }
            return mySDkPlatform;
        }
    
        //初始化
        public void init(Activity activity){
            System.out.println("调用了mysdk的初始化方法");
            //该方法的三个参数
            //gameObjectName:unity中的gameObject的类名
            //unityInitCallbackName:unity中gameObject绑定的c#脚本里的方法名
            //第三个参数:SDK向unity传递的字符串
            UnityPlayer.UnitySendMessage(gameObjectName,unityInitCallbackName,"这是SDK初始化结果回调");
        }
    
        //登录
        public void login(String arg1){
            System.out.println("调用了mysdk的登录方法;arg1 = "+arg1);
            UnityPlayer.UnitySendMessage(gameObjectName,unityInitCallbackName,"这是SDK登录结果回调");
        }
    
        //登出,静态,跟以上非静态方法做不同例子演示
        public static void logout(String arg1){
            System.out.println("调用了mysdk的登出方法");
            UnityPlayer.UnitySendMessage(gameObjectName,unityInitCallbackName,"这是SDK登出结果回调");
        }
    
        //拿到unity的类名
        public void setGameObjectName(String gameObjectName){
            this.gameObjectName = gameObjectName;
        }
        //拿到unity接收SDK初始化结果的方法名
        public void setUnityInitCallbackName(String unityInitCallbackName) {
            this.unityInitCallbackName = unityInitCallbackName;
        }
        //拿到unity接收SDK登录结果的方法名
        public void setUnityLoginCallbackName(String unityLoginCallbackName) {
            this.unityLoginCallbackName = unityLoginCallbackName;
        }
        //拿到unity接收SDK登出结果的方法名
        public void setUnityLogoutCallbackName(String unityLogoutCallbackName) {
            this.unityLogoutCallbackName = unityLogoutCallbackName;
        }
    }

    2、类中的UnityPlayer.UnitySendMessage(gameObjectName,callbackName,arg1)方法是Unity中的一个unity-classes.jar包下的方法,SDK需要引入该包才能编译,在引入过程中需要注意,因为unity中已经有这个jar包,SDK库工程只在编译的时候需要用到,真正接入的时候,只需要拷贝SDK库工程生成的aar包即可,不需要把unity-classes.jar编译进去,否则会报异常,引入unity-classes.jar方法如下:

    (1)新建一个unity3dlibs文件夹,保证与工程中的libs不重名,将unity-classes.jar放入该文件夹下

    (2)在工程的build.gradle中加入依赖

    //添加一个本地仓库,并将unity3dlibs目录作为仓库地址
    repositories{
        flatDir {
            dirs 'unity3dlibs'
        }
    }
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'com.android.support:appcompat-v7:28.0.0'
        testImplementation 'junit:junit:4.12'
    
        compileOnly files('unity3dlibs/unity-classes.jar')//只在编译的时候用到
    }
    

    (3)清单文件;如果SDK中需要在manifest中application根节点下注册信息,在清单文件中需要编写以下代码:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.sdk.mysdk">
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
    
            //方式一:SDK的接口类继承了unity的UnityPlayerActivity,这里启动入口填写SDK的接口类路径
            //方式二:SDK的接口类没有继承unity的UnityPlayerActivity,这里填写"com.unity3d.player.UnityPlayerActivity"
            //本例子中使用方式二
            //Unity启动入口activity
            <activity android:name="com.unity3d.player.UnityPlayerActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    

    清单文件中注册UnityPlayerActivity是为了将SDK做成符合Unity接入的plugins,Unity编译时会将自身生成的manifest和SDK的manifest进行合并,但SDK的manifest优先级比较高,所以需要SDK在manifest中注册启动的UnityPlayerActivity。                     (注:如果SDK中有Activity并且继承了UnityPlayerActivity,则启动应用的main入口需要改为SDK的Activity)

    三、SDK调用Unity3D

    1、在Unity中新建一个脚本,调用MySDkPlatform中的方法

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class NewBehaviourScript : MonoBehaviour
    {
    
        AndroidJavaClass unityPlayer;
        AndroidJavaObject currentActivity;
    
        AndroidJavaClass androidJavaClass;
        AndroidJavaObject androidJavaObject;
    
        // Start is called before the first frame update
        void Start()
        {
            步骤一:拿到接口对象实例
            //方式一
            //通过包名获取UnityPlayer,目的为了获取下面当前activity对象用
            //使用这种方式,SDK的activity或者给cp的的接口类需要继承UnityPlayerActivity
            //拿到unityPlayer(固定写法,不用修改),即可调用activity或者给cp的接口类中的静态方法,
            unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            //通过unityPlayer获取当前的activity (注:固定写法,不用修改),拿到currentActivity,即可调用SDK的activity或者给cp的接口类中的非静态方法
            currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
    
            //方式二(本例中使用的该方式)
            //获取SDK的MySDkPlatform类,可以直接使用androidJavaClass调用MySDkPlatform的静态方法
            androidJavaClass = new AndroidJavaClass("com.sdk.mysdk.MySDkPlatform");
            //拿到MySDkPlatform类中的单例对象,可以直接使用androidJavaObject调用MySDkPlatform中的非静态方法
            androidJavaObject = androidJavaClass.CallStatic<AndroidJavaObject>("getInstance");
    
            //步骤二:告诉SDK返回参数时调用的方法名
            //unity调用SDK的方法,传入一个参数,该参数为定义在unity中的方法名,当unity调用SDK的接口,
            //且需要SDK返回参数时,SDK会根据这里传入的方法名,调用定义在unity中的方法
            androidJavaObject.Call("setGameObjectName", "Main Camera");
            androidJavaObject.Call("setUnityInitCallbackName", "initCallback");
            androidJavaObject.Call("setUnityLoginCallbackName", "showAdGifCallback");
            androidJavaObject.Call("setUnityLogoutCallbackName", "showAdGifCallback");
    
            //步骤三:调用SDK的接口方法
            //SDK初始化
            Button btn = GameObject.Find("Button").GetComponent<Button>();
            btn.onClick.AddListener(() => 
            {
                Debug.Log("-->初始化");
                //调用初始化方法,传入当前activity对象(注:这里的activity参数就是方式一中获取到的currentActivity)
                androidJavaObject.Call("init", currentActivity);
            });
    
            //登录
            Button btn2 = GameObject.Find("Button2").GetComponent<Button>();
            btn2.onClick.AddListener(() =>
            {
                androidJavaObject.Call("login", "unity调用了SDK的登录");
            });
    
            //登出
            Button btn3 = GameObject.Find("Button3").GetComponent<Button>();
            btn3.onClick.AddListener(() =>
            {
                //这里使用的是androidJavaClass调用的SDK的登出,在SDK接口类中logout方法为静态的,                
                //所以这里使用androidJavaClass类直接调用,而上面登录方法为非静态的,所以使用的是androidJavaObject
                androidJavaClass.Call("logout", "unity调用了SDK的登出");
            });
    
        }
    
        //步骤四:定义unity接收SDK返回参数的方法,这里的方法名与步骤二中传入的参数名必须一致
        //SDK初始化后,会调用该方法,参数为回调结果
        void initCallback(string callback)
        {
            Debug.Log("-->收到SDK初始化的回调:"+callback);
        }
    
        //SDK登录后,会回调该方法,参数为回调结果
        void loginCallback(string callback)
        {
            Debug.Log("-->收到SDK登录的回调:" + callback);
        }
    
        //SDK登出后,会回调该方法,参数为回调结果
        void logoutCallback(string callback)
        {
            Debug.Log("-->收到SDK登出的回调:" + callback);
        }
    
        // Update is called once per frame
        void Update()
        {
    
        }
    }
    

    四、打包

    1、方式一:SDK打成plugins给Unity

    把SDK编译成aar,以及manifest放入Unity对应的Assets文件夹下的plugins下的Android下,以及libs下,没有的文件夹自己新建一个,目录对应如下:

    Manifest放入Android文件夹下(如上图)

    SDK的aar包放入libs文件夹下(如上图)

    配置好以上步骤即可开始打包编译;

    2、方式二:Unity导出安卓工程接入SDK(studio版)

    这种方式接入更为简单,将SDK的aar包拷贝到游戏工程下的libs下,并在gradle中添加aar依赖,在Manifest清单文件中,将自己的注册信息拷贝到游戏工程中直接打包即可;(注:SDK工程中unity-classes.jar不需要拷贝进去,导出的安卓游戏工程中已经有了这个jar包)

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 本篇展示在Unity3D中调用友盟SDK的实现方法. 首先附上项目源代码地址:https://github.com/hiramtan/unity3d_test_umeng SDK下载及使用方法说明见官方开发文档:http://dev.umeng.com/doc/

    http://blog.csdn.net/hiramtan/article/details/8927398


    本篇展示在Unity3D中调用友盟SDK的实现方法.

    首先附上项目源代码地址:https://github.com/hiramtan/unity3d_test_umeng

    SDK下载及使用方法说明见官方开发文档:http://dev.umeng.com/doc/document_ana_android.html

    打开eclipse新建一个android工程:

    设置package neme (需要注意:有一些资料注明package name需要与unity3D里面的bundle identifier一致.

    但是经过测试,就算是不一致,功能仍可实现....


    找到SDK:需要导入Unity3D自身的classes.jar和友盟 SDK。首先找到Unity3D安装目录下的classes.jar。具体路径在你的Unity3D的安装目录下的这个文件夹中Editor\Data\PlaybackEngines\androidplayer\bin然后就是从网上下载的友盟 SDK了。

    在Eclipse中导入SDK,具体做法是右键eclipse工程,选择最后一项:


    选择java build path后点击add external jars,找到上面提到的classes.jar和友盟 SDK,分别导入,点击ok,如下:


    导入成功后在eclipse中会多出下面两项:


    然后需要修改MainActivity.java如下所示(下面会有完整代码):


    到这里Unity3D部分的工作算是完成了,下面就是集成第三方SDK了。SDK要求的配置信息及逻辑参考SDK官网的开发文档。

    这里用的是友盟的SDK,参照友盟SDK的开发者文档。

    这时我们需要在友盟网站添加一个应用,网站会随机分配一个AppKey。怎样注册友盟服务和怎样添加应用见官方说明。

    (如果我们需要在游戏中添加联通付费SDK,当然不需要与友盟相关的工作。而是去联通开发者网站添加应用并得该应用内置付费的AppKey)

    我这里在友盟添加的应用信息如下,这里我们需要获知友盟分配的AppKey。如下:


    友盟官网要求配置AndroidManifest.xml如下,具体看友盟官方开发文档。


    为此我们在Eclipse中配置AndroidManifest.xml如下(主要就是将友盟要求添加的部分粘贴进去):


    修改如下:

    [html] view plaincopy
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     package="com.example.test"  
    4.     android:versionCode="1"  
    5.     android:versionName="1.0" >  
    6.   
    7.     <uses-sdk  
    8.         android:minSdkVersion="8"  
    9.         android:targetSdkVersion="17" />  
    10.   
    11.     <application  
    12.         android:allowBackup="true"  
    13.         android:icon="@drawable/ic_launcher"  
    14.         android:label="@string/app_name"  
    15.         android:theme="@style/AppTheme" >  
    16.         <activity  
    17.             android:name="com.example.test.MainActivity"  
    18.             android:label="@string/app_name" >  
    19.             <intent-filter>  
    20.                 <action android:name="android.intent.action.MAIN" />  
    21.   
    22.                 <category android:name="android.intent.category.LAUNCHER" />  
    23.             </intent-filter>  
    24.         </activity>  
    25.         <meta-data android:value="523f9df156240b085a054288" android:name="UMENG_APPKEY"></meta-data>  
    26. <meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/>  
    27.     </application>  
    28.   
    29. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>  
    30. <uses-permission android:name="android.permission.INTERNET"></uses-permission>  
    31. <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>  
    32. </manifest>  

    友盟官网要求添加引用import com.umeng.analytics.MobclickAgent,友盟官网要求如下:

    参照官网开发文档调用SDK中封装的方法,最终修改MainActivity.java如下:

    [java] view plaincopy
    1. package com.example.test;    
    2.     
    3. import android.os.Bundle;    
    4. import android.app.Activity;    
    5. import android.view.Menu;    
    6.     
    7. import com.unity3d.player.UnityPlayerActivity;//Unity3D    
    8. import com.umeng.analytics.MobclickAgent;//友盟    
    9.     
    10.     
    11. public class MainActivity extends UnityPlayerActivity {    
    12.     
    13.     @Override    
    14.     protected void onCreate(Bundle savedInstanceState) {    
    15.         super.onCreate(savedInstanceState);    
    16.         //setContentView(R.layout.activity_main);    
    17.     }    
    18.     
    19.     @Override    
    20.     public boolean onCreateOptionsMenu(Menu menu) {    
    21.         // Inflate the menu; this adds items to the action bar if it is present.    
    22.         getMenuInflater().inflate(R.menu.main, menu);    
    23.         return true;    
    24.     }    
    25.     public void onResume() {  
    26.         super.onResume();  
    27.         MobclickAgent.onResume(this);  
    28.         }  
    29.         public void onPause() {  
    30.         super.onPause();  
    31.         MobclickAgent.onPause(this);  
    32.         }  
    33.     public void onEvent()    
    34.     {    
    35.         MobclickAgent.onEvent(this"testevent");    
    36.         System.out.println("test");  
    37.     }    
    38. }    

    然后在Eclipse中导出Jar包在Unity3D中使用,下面是导出流程,导出/选择导出路径,如下:



    然后在Unity3D中建立如下目录,其中AndroidManifest和res文件夹是从Eclipse项目中复制出来的(找到工程目录直接复制到Unity3D目录中即可)。

    bin文件夹和libs文件夹是自己建立的,其中bin文件夹中放eclipse导出的jar包,libs中放第三方jar包。如下:


    在Unity3D Test.cs中添加代码调用在eclipse中创建的方法onEvent();

    [csharp] view plaincopy
    1. using UnityEngine;  
    2. using System.Collections;  
    3.   
    4. public class Test : MonoBehaviour  
    5. {  
    6.     AndroidJavaClass clas;  
    7.     AndroidJavaObject obj;  
    8.     // Use this for initialization    
    9.     void Start()  
    10.     {  
    11.         clas = new AndroidJavaClass("com.unity3d.player.UnityPlayer");  
    12.         obj = clas.GetStatic<AndroidJavaObject>("currentActivity");  
    13.     }  
    14.     void OnGUI()  
    15.     {  
    16.         if (GUI.Button(new Rect(Screen.width * 0.3f, Screen.height * 0.3f, Screen.width * 0.3f, Screen.height * 0.3f), "Click"))  
    17.             obj.Call("onEvent");  
    18.     }  
    19. }  

    下面就可以看到结果了:

    1.运行应用点击click后logcat如下:


    2.在友盟官网查看自定义事件:

    能看到自定义事件的统计,说明在Unity3D中调用友盟SDK成功。调用其它SDK方法同理。

    如有任何建议请发邮件至hiramtan@qq.com


    展开全文
  • unity3d接入ANDROID相关SDK请参考:...unity3d接入IOS相关SDK 下面以微信分享sdk为例介绍: 首先就是在c#这边定义接口 using UnityEngine; using LitJson; using System.Runtime.InteropS...
    unity3d接入ANDROID相关SDK请参考:http://blog.csdn.net/yang8456211/article/details/51331358
    unity3d接入IOS相关SDK
    下面以微信分享sdk为例介绍:
    首先就是在c#这边定义接口

    using UnityEngine;
    using LitJson;
    using System.Runtime.InteropServices;

    public class ShareMgr : MonoBehaviour {

        //声明unity--to--ios的函数
    #if UNITY_IOS
        [DllImport ("__Internal")]  
    private static extern void RegisterWeChat(string wxAppID);
    [DllImport ("__Internal")]  
    private static extern void ShareWithWeChat(string content);
    #endif

        ///
        /// 注册的微信id
        ///
        string wxAppID = "test6668888";

        ///
        /// 分享之后的lua回调
        ///
        System.Action luaResponseCall;

        ///
        /// 默认分享内容
        ///
    string defaultContent="666888";


        public void ShareWeChat(string content)
        {
            if (string.IsNullOrEmpty(content))
            {
                content = defaultContent;
            }

    #if UNITY_IOS
            ShareWithWeChat(content);
    #endif

        }

        ///
        /// 注册分享之后的回调
        ///
        ///
        public void RegLuaResponse(System.Action luaResponseCall)
        {
            this.luaResponseCall = luaResponseCall;
        }

        ///
        /// 删除注册的回调
        ///
        public void UnRegLuaResponse()
        {
            luaResponseCall = null;
        }


        void Awake()
    {
            this.name = "ShareMgr";
            DontDestroyOnLoad(gameObject);
            Init();
        }


    void Init()
    {

    #if UNITY_IOS
            RegisterWeChat(wxAppID);
    #elif UNITY_ANDROID
            AndroidJavaClass jc = new Android;
    Android;
    jo.Call("RegisterWeChat", wxAppID);
    #endif

        }
        void ShareCallResponse(int state)
    {
            if (luaResponseCall != null)
            {
                luaResponseCall(state);
            }
    }
       
    }

    再者就是调用oc的方法:

    //
    //  ShareMgr.h
    //
    //  Copyright . All rights reserved.
    //

    #import

    #import "WXApi.h"
    #import "AppDelegateListener.h"

    typedef NS_ENUM(int,ErrorCode) {
       ERROR_CODE_NO_INSTALL=-101,//没有安装微信客户端,分享失败!
       ERROR_CODE_SHARE_SUCCESS=0,//分享成功
       ERROR_CODE_SHARE_CANCEL=-2,//分享失败
       ERROR_CODE_SHARE_FAIL=-3,//分享失败
    };

    @interface ShareMgr : NSObject
    {

    }

    @property (nonatomic, strong) UIActivityIndicatorView *indicatorView;
    @property (nonatomic) BOOL waitingResponse;
    @property (nonatomic) const char*targetMgr;
    @property (nonatomic) const char*targetMethod;

    -(void)ShareWithWeChat:(NSString*)content;


    + (instancetype)Instance;
    @end



    //
    //  ShareMgr.mm
    //
    //  Copyright . All rights reserved.
    //
    #import
    #import "ShareMgr.h"
    #include "UnityAppController.h"

    #if defined (__cplusplus)
    extern "C" {
    #endif
        extern void ShareWithWeChat(const char* content);
        extern void RegisterWeChat(const char* wxAppID);
    #if defined (__cplusplus)
    }
    #endif


    @implementation ShareMgr

    static ShareMgr*_instance=NULL;

    -(id)init
    {
        if ((self = [super init]))
        {
            self.targetMgr = [@"ShareMgr" UTF8String ];
            self.targetMethod = [@"ShareCallResponse" UTF8String];
        }
        return self;
    }

    + (instancetype)Instance
    {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            _instance = [[ShareMgr alloc] init];
            UnityRegisterAppDelegateListener(_instance);
        });
        return _instance;
    }

    -(void)ShareWithWeChat:(NSString*)content
    {
        if (self.waitingResponse){return;}
        if([WXApi isWXAppInstalled])
        {
            WXMediaMessage *message = [WXMediaMessage message];
            [message setThumbImage:[UIImage imageNamed:@"Icon@2x.png"]];
            
            WXImageObject *ext = [WXImageObject object];
            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

            NSString *documentsDirectory = [paths objectAtIndex:0];
            NSMutableString *StringFullPath = [[NSMutableString alloc] initWithString:@""];

            [StringFullPath appendString:documentsDirectory];
            [StringFullPath appendString:@"/temp_capture_screen.png"];

            ext.imageData = [NSData dataWithContentsOfFile:StringFullPath];
            UIImage* image = [UIImage imageWithData:ext.imageData];
            ext.imageData = UIImagePNGRepresentation(image);
            
            message.mediaObject = ext;
            message.description = content;
            
            SendMessageToWXReq* req = [[SendMessageToWXReq alloc] init];
            req.bText = NO;
            req.message = message;
            req.scene = WXSceneTimeline;
            
            [WXApi sendReq:req];
            
            
            if (self.indicatorView)
            {
                [self.indicatorView startAnimating];
                [self.indicatorView setHidesWhenStopped:YES];
            }
            else
            {
                dispatch_async(dispatch_get_main_queue(), ^{
                    if (!self.indicatorView) {
                        self.indicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
                        
                        
                        self.indicatorView.center = GetAppController().rootView.center;
                        [GetAppController().rootView addSubview:self.indicatorView];
                        self.indicatorView.color = [UIColor whiteColor];
                        
                        [self.indicatorView startAnimating];
                        [self.indicatorView setHidesWhenStopped:YES];
                    }
                });
            }
            self.waitingResponse = YES;
        }
        else
        {
            UnitySendMessage([self targetMgr], [self targetMethod] ,[[NSString stringWithFormat:@"%i" ,(int)ERROR_CODE_NO_INSTALL] UTF8String]);
            self.waitingResponse = NO;
        }
            
    }

    #pragma mark - WXApiDelegate 
    -(void) onResp:(BaseResp*)resp
    {
        [self.indicatorView stopAnimating];
        
       

        int errorCode ;
        if (resp.errCode == ERROR_CODE_SHARE_SUCCESS) 
        {
            errorCode = ERROR_CODE_SHARE_SUCCESS;
        }
        else if(resp.errCode == ERROR_CODE_SHARE_CANCEL)
        {
            errorCode=ERROR_CODE_SHARE_CANCEL;
        }
        else
        {
            errorCode=ERROR_CODE_SHARE_FAIL;
        }
        
        if([resp isKindOfClass:[SendMessageToWXResp class]])
        {
            UnitySendMessage([self target], [self targetMethod], [[NSString stringWithFormat:@"%i" ,errorCode] UTF8String]);
            self.waitingResponse = NO;
        }
    }

    #pragma mark - AppDelegateListener 
    -(void) willEnterForeground:(NSNotification *)notification
    {
        
    }

    -(void) didFinishLaunching:(NSNotification *)notification
    {
        
    }

    -(void) didEnterBackground:(NSNotification *)notification
    {
        
    }

    -(void) didReceiveRemoteNotification:(NSNotification *)notification
    {
        
    }

    -(void) didReceiveLocalNotification:(NSNotification *)notification
    {
        
    }

    -(void) didRegisterForRemoteNotificationsWithDeviceToken:(NSNotification *)notification
    {
        
    }

    -(void) onOpenURL:(NSNotification *)notification
    {
        
    }

    @end

    #if defined(_cplusplus)
    extern "C"{
    #endif

        void ShareWithWeChat(const char* content)
        {
            NSString *s = [[NSString alloc] initWithUTF8String:content];
            [[ShareMgr Instance] ShareWithWeChat:s];
        }
        
        
        void RegisterWeChat(const char* wxAppID)
        {
            [ShareMgr Instance];
            NSString *appId = [[NSString alloc] initWithUTF8String:wxAppID];
            // 微信注册
            [WXApi registerApp:appId];
            
        }
        
    #if defined(_cplusplus)
    }
    #endif

    展开全文
  • 第三方SDK框架接入 (Android Studio)一 Android Android 与 Unity 交互: UnityPlayer.UnitySendMessage("string","string", var2); UnitySendMessage(“string”,“string”, ***),这是方法,我们至少...
  • 本文内容为创建UNITY3D接入91SDK的DEMO的具体操作过程。此为小白文,相关开发技术问题请自行百度解决。 我的开发环境: MAC系统, ECLIPSE, UNITY4.0 开发过程: 1. 准备好UNITY3D接入91SDK的插件包...
  • unity接入ios三方sdk,ios开发共享
  • unity引用android第三方sdk一般有两种方法 :①用unity导出eclipse工程,然后再在eclipse中引入sdk。这种方法是用eclipse发布apk。②先用eclipse新建工程,在eclipse中引入sdk,并提供unity接口;然后将工程打包,...
  • 很多开发者对OC语言、C语言并不熟悉,自行封装API存在困难,故我特地编写本文让大家可以更快更好的进行SDK接入 本文是参照http://bbs.18183.com/thread-456979-1-1.html的解决方案对SDK常用API进行了封装,有兴趣的...
  • Unity 第三方SDK框架接入 (Android Studio)一 Unity 在上一篇中,我实现Android项目的实现,现在我们来完善Unity端的封装 IPlatformSdkHelper 接口 public interface IPlatformSdkHelper { /// <summary&...
  • 1.我在自己的项目中接入了ShareSDK,实现登录分享功能,但我还需要写个自己的SDK实现一些unity并没有提供的功能,譬如电量,wife,获取相册等功能。 2.我曾尝试写个安卓工程继承UnityPlayerActivity,在和ShareSDK的...
  • 上篇说清楚了Unity和Android调用的方式,很多东西没有讲很详细,因为重头在这篇,讲的是怎么具体接入Android SDK的方式,和怎么自己去做一个方便Unity接入SDK。 如果你跟着我做完了,你应该理解到的内容: 1. ...
  •  是因为这个插件极大的简化了我对接渠道SDK的工作量,精力和时间,也避免了我不断的重复的做接入SDK工作这样没有成就感的无聊工作! 所以我就介绍一下这款插件!!!!!! 我的开发环境:windows系统 , eclipse ...
  • 个人开发者发布开发应用想接入广告SDK,个人jie'c
  • 前言:以前没SDK,总觉得很高深莫测的样子,但真正接触之后,发现并不是那么可怕,重要的是要学会android怎么调用Unity里的方法,Unity怎么调用android里的方法,当然, 现在学的还比较肤浅,继续加油喽。...
  • 本篇展示在unity3d中调用友盟SDK的实现方法,调用联通/移动付费SDK同理,下面是制作流程。 首先附上项目源代码地址:https://github.com/hiramtan/unity3d-testsdk SDK下载及使用方法说明见官方开发文档:...
1 2 3 4 5 ... 20
收藏数 751
精华内容 300
关键字:

unity3d接入第三方sdk