简介:首先介绍一下,为什么博主要选择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的代码:

<?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的代码为:

<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类,添加如下代码:

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类的代码:

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的模板

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代码:

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包

Unity之SDK接入(OPPO)的更多相关文章

  1. Unity之SDK接入(Unity与Android通信)

    首先介绍一点关于Android与unity通信的知识: 完成通信主要靠unity中的class.jar包(在unity的安装目录下). 在unity中调用android的方法: jo.call(&qu ...

  2. 【Unity游戏开发】SDK接入与集成——小白入门篇

    一.简介 通常一款游戏开发到后期,一般都会涉及到第三方SDK的接入与集成,对于不熟悉SDK接入的同学来说,接SDK每次都是云里雾里,而熟悉SDK接入的同学又觉得不断地重复做接入SDK工作这样没有成就感 ...

  3. 手机游戏渠道SDK接入工具项目分享(二)万事开头难

    一般接到任务后程序员们通常都开始着手进行技术调研了,但我这活是项目负责人.还有一大堆事情要先期准备,没人能帮忙. 一.人力配置 考虑的之前已经有一波人搞了大半年,但没有起色,先期也没有太大人力需求,所 ...

  4. 手机游戏渠道SDK接入工具项目分享(三)拨开云雾是个坑

    一直在纠结是先写框架设计还是先写掉过的坑,最后本这娱乐大众的态度先写掉过的坑让大家乐呵下. 项目开发过程中遇问题无数,回顾下8个大坑照成了项目一定程度上延期甚至返工. 项目一开始几个人把现有3家主流的 ...

  5. SDK接入(3)之iOS内支付(In-App Purchase)接入

    SDK接入(3)之iOS内支付(In-App Purchase)接入 继整理了Android平台的SDK接入过程.再来分享下iOS平台的内支付(In-App Purchase)接入,作为笔者在游戏开发 ...

  6. SDK接入(2)之Android Google Play内支付(in-app Billing)接入

    SDK接入(2)之Android Google Play内支付(in-app Billing)接入 继上篇SDK接入(1)之Android Facebook SDK接入整理完Facebook接入流程之 ...

  7. SDK接入(1)之Android Facebook SDK接入

    SDK接入(1)之Android Facebook SDK接入 由于游戏已上线,且处于维护阶段,所以有空写写各种SDK接入过程和遇到的问题,也当作一种工作总结.SDK接入主流分为这么几类,登录.支付. ...

  8. 手机游戏渠道SDK接入工具项目分享(一)缘起

    #剧情章节 # 上周刚结束一个外包的项目,开发手机游戏渠道SDK聚合接入工具的,现在有空回顾整理一下这个项目开发过程,因涉嫌商业秘密不会提供项目代码,只谈下开发思路和掉过的坑. 本人多年从事手机互联网 ...

  9. SDK接入(U8SDK)——SDK抽象层的设计

    上一篇文章,我们总体地分析并设计了一套高效的SDK接入方案,也罗列出这套方案,我们需要完成的工作.这里再罗列并回顾下: 1.统一抽象的SDK接入框架 2.各个SDK接入实现 3.一键打包工具 4.统一 ...

随机推荐

  1. Linux中的update和upgrade的作用

    update 是同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包.update是下载源里面的metad ...

  2. python课堂整理2

    一.字节和编码 1个字节是8位二进制 utf-8 表示一个中文要用3个字节 gbk 为中国汉字发明,2个字节可表示汉字 所以 utf-8 可以读gbk编码,而gbk去读utf-8 的内容会乱码 uni ...

  3. springboot - 登录+静态资源访问+国际化

    1.项目目录结构 2.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmln ...

  4. python基础——元组(tuple)

    Python的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. tuple1 = () tuple2 = ...

  5. 2019全国大学生信息安全与对抗技术竞赛全国线下总决赛 Writeup

    0x00 Begin 关于 ISCC 2019 北理工总决赛,这一次比赛体验感总体差不多,最后我们战队荣获全国一等奖第一名,在这里非常感谢我的团队以及我的队友. 0x01 Reverse 下载题目:e ...

  6. DBeaver之连接hive初体验

    工作中第一次和搞大数据的同事配合,他让我用hue看hive数据,,由于本人英语菜逼,hue全英文的页面看不习惯,遂找了一个DBeaver工具,我也是第一次使用这个工具,好像挺可以的,可以连mysql, ...

  7. python利用select实现的Socket Server

    # 利用python的select模块实现简单的Socket Sever #实现多用户访问,再次基础上可以实现FTP Server应用程序 # 发布目的,在于解决了客户端强行终止时,服务器端也跟着程序 ...

  8. poj 1131 Octal Fractions(高精度小数进制转换) Java

    虽然题目那么长其实就是把8进制的浮点数转换成10进制,为了练习Java Biginteger 类 我这里用的是Java,也可以用数组模拟. import java.math.BigDecimal; i ...

  9. Apache NiFi 核心概念和关键特性

    本文来源于官方文档翻译 NiFi 的核心概念 NiFi 最早是美国国家安全局内部使用的工具,用来投递海量的传感器数据.后来由 apache 基金会开源.天生就具备强大的基因.NiFi基本设计理念与 F ...

  10. 【简洁易懂】CF372C Watching Fireworks is Fun dp + 单调队列优化 dp优化 ACM codeforces

    题目大意 一条街道有$n$个区域. 从左到右编号为$1$到$n$. 相邻区域之间的距离为$1$. 在节日期间,有$m$次烟花要燃放. 第$i$次烟花燃放区域为$a_i$ ,幸福属性为$b_i$,时间为 ...