Unity之SDK接入(OPPO)
简介:首先介绍一下,为什么博主要选择OPPO的SDK接入呢,因为OPPO的SDK接入是目前博主发现最简单的SDK。所以,博主选择OPPO,带领大家接SDK从入门到精通
工作准备:
1.环境配置(SDK,JDK,Unity,eclipse的ADT)
2.资源下载(直接去OPPO开发者平台https://open.oppomobile.com/下载)
3.keystore准备,方法见下图
在Unity中申请:
现在我们现在eclipse中新建android工程,方法如下:
名字自己随意取,注意包名,最好与我的一样,避免后面项目出错!!!接着一直Next,直到最后finish,至此你的android工程创建好了。
现在我们按官方文档的流程,先复制demo中的AndroidManifest.xml的代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.myoppogame.nearme.gamecente" android:versionCode="530" android:versionName="1.0" > <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="19" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.WRITE_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" /> <application android:name="com.myoppogame.nearme.gamecente.MyApplication" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name"> <activity android:name="com.myoppogame.nearme.gamecente.MainActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation|screenSize"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- nearme game sdk config goes here --> <meta-data android:name="debug_mode" android:value="true" /> <!-- 日志开关,发布时候设置为false --> <meta-data android:name="is_offline_game" android:value="false" /> <!-- true:单机游戏 false:网游 --> <meta-data android:name="app_key" android:value="c5217trjnrmU6gO5jG8VvUFU0" /> <!--appKey,游戏上线时请务必替换成游戏自身的appkey--> <activity android:name="com.nearme.game.sdk.component.proxy.ProxyActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:theme="@style/Theme_Dialog_Custom" android:process=":gcsdk"> </activity> <service android:name="com.nearme.game.sdk.component.proxy.ProxyApiService" android:process=":gcsdk" android:priority="1000"> </service> <receiver android:name="com.nearme.game.sdk.component.proxy.ProxyUserCenterOperateReceiver" android:exported="true" android:process=":gcsdk"> <intent-filter> <action android:name="com.oppo.usercenter.account_login" /> <action android:name="com.oppo.usercenter.account_logout" /> <action android:name="com.oppo.usercenter.modify_name" /> </intent-filter> </receiver> <!-- nearme game sdk config end --> </application> </manifest>
这个时候你会发现AndroidManifest.xml出错了,这时候我们修改styles.xml的代码为:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<resources> <!-- Base application theme, dependent on API level. This theme is replaced by AppBaseTheme from res/values-vXX/styles.xml on newer devices. --> <style name="AppBaseTheme" parent="android:Theme.Light"> <!-- Theme customizations available in newer API levels can go in res/values-vXX/styles.xml, while customizations related to backward-compatibility can go here. --> </style> <!-- Application theme. --> <style name="AppTheme" parent="AppBaseTheme"> <!-- All customizations that are NOT specific to a particular API-level can go here. --> </style> <style name="Theme_Dialog_Custom" parent="@android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowFullscreen">true</item> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> </style> </resources>
现在复制下载的资料里面的如图中的文件夹把工程里面的对应文件夹覆盖
然后,我们需要添加MyApplication.java类,添加如下代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.myoppogame.nearme.gamecente; import com.nearme.game.sdk.GameCenterSDK; import android.app.Application; public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); String appSecret = "e2eCa732422245E8891F6555e999878B"; GameCenterSDK.init(appSecret, this); } }
最后,添加MainActivity.java类的代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.myoppogame.nearme.gamecente; import com.nearme.game.sdk.GameCenterSDK; import com.nearme.game.sdk.callback.ApiCallback; import com.nearme.game.sdk.callback.GameExitCallback; import com.nearme.game.sdk.common.util.AppUtil; import android.app.Activity; import android.os.Bundle; import android.view.View; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.Login_Activity).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { Login_Btn(); } }); findViewById(R.id.Quit_Activity).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View arg0) { Quit_Btn(); } }); } private void Login_Btn() { GameCenterSDK.getInstance().doLogin(this, new ApiCallback() { @Override public void onSuccess(String resultMsg) { } @Override public void onFailure(String resultMsg, int resultCode) { } }); } private void Quit_Btn() { GameCenterSDK.getInstance().onExit(MainActivity.this, new GameExitCallback() { @Override public void exitGame() { // CP 瀹炵幇娓告垙閫�鍑烘搷浣滐紝涔熷彲浠ョ洿鎺ヨ皟鐢�? // AppUtil宸ュ叿绫婚噷闈㈢殑�?�炵幇鐩存帴寮烘潃杩涚▼~ AppUtil.exitGameProcess(MainActivity.this); } }); } }
注意:上面的包名,类名,如果和我的不同,记得修改成代码中对应的包名。
下图就是一个可以运行的android。下面介绍三种打包运行ADK的方法
方法一:直接在eclipse中打包成APK,在模拟器中运行(但是这种方法只是单纯的android项目,并没实现与Unity的交互)。
右击项目,点击export
选择Android下的Export Android Application——>Next ——>
现在我们到了这一步,需要填写密码,这个我们可以在们把刚刚创建的账户密码输入,按照提示过程就成功生成了APK,安装之后就可以在模拟器上运行。
方法二:将eclipse中的Android项目导成jar包,通过Unity导出APK。
用此方法,我们需要想给大家讲点关于unity与Android通信的知识,我们知道,unity和android并不认识,两者并不能直接实现通信,那怎么办勒?这时候我们自然而然的想到使用中间件(桥梁作用),Unity提供了一个jar包来实现与外界通信,现在,我们需要将该包导入到Android工程中,方法如下:
按照下图,找到Unity安装目录下的class.jar包
在方法一的基础上按照下图的指示完成相关操作
注意:因为博主不是用的同一个项目,所以后面的项目名和前面的会有差异,不过不影响,博主后面只是给大家演示过程。并不会对代码进行修改,请大家见谅
下面是该OPPO的Activity的模板
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class DemoActivity extends UnityPlayerActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); findViewById(R.id.Activity名字).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { //TODO点击1按钮实现函数; } }); 。。。 。。。 } private void 1按钮实现函数名() { GameCenterSDK.getInstance().do**( , new ApiCallback() { @Override public void onSuccess(String resultMsg) { //TODO } @Override public void onFailure(String resultMsg, int resultCode) { //TODO } }); } 。。。 。。。 }
注意包名的统一
编写Unity代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System; using UnityEngine; using UnityEngine.UI; public class CallAndroid : MonoBehaviour { private Button login_Btn, quit_Btn; private AndroidJavaClass jc; private AndroidJavaObject jo; //单例模式 private static CallAndroid _instance; public static CallAndroid Instance { get { if (_instance == null) { _instance = new CallAndroid(); } return _instance; } } void Start() { login_Btn = GameObject.Find("Login_Bnt").GetComponent<Button>(); quit_Btn = GameObject.Find("Quit_Btn").GetComponent<Button>(); _instance = this; jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); } public void Login_Btn() { jo.Call("Login_Btn"); } public void Quit_Btn() { jo.Call("Qiut_Btn"); } }
unity打包(打包之注意以下两点)
注意1:
注意2:
方法三:,通过Unity导出Android包,再导入eclipse,通过eclipse导出APK。
在上面Unity工程的基础上,删掉Plugins整文件夹(因为这是方法二从eclipse拖过来的,其实不删也没有影响,只是为了区分方法二,三的差别)
unity导出google插件,注意包名,keystore设置
将unity导出的包导入eclipse,就是一个android工程。删掉下面三个类
后面对该工程的修改和方法一一样。修改完后直接导出成APK包