我使用C ++在cocos2dx上创建游戏,现在我想将它与Facebook连接,为了实现这一点,我用JAVA做,然后用JNI连接它。这两件事都很完美,但要将它与Facebook连接,我需要@override方法onCreate(),但我不知道如何从C ++ JNI调用该方法。
当我将我的Facebook代码移动到新功能时,我需要执行此
Session.openActiveSession(this, true, new Session.StatusCallback() {}
但onCreate()之外不存在“this”。有任何想法吗?
1-。如何使用Facebook登录,而无需调用onCreate(){}
方法2 - 。如何从JNI C ++调用onCreate方法?
我的JNI代码:
它调用了FacebookLogin,并且工作正常,但没有使用onCreate
if(JniHelper::getStaticMethodInfo(minfo,
"com/company/game/Facebook",
"facebookLogin",
"()V"))
{
jstring StringArg1 = minfo.env->NewStringUTF(msg);
minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID);
minfo.env->DeleteLocalRef(minfo.classID);
}
谢谢:D
答案 0 :(得分:1)
我解决了。
问题是你需要把它放在Cocos2dxActivity的主要Actividty上,然后分配onEnter act = this。如果act是Cocos2dxActivity,并且在任何你称之为的地方,你将放置行为
代码:
public class game extends Cocos2dxActivity{
static Cocos2dxActivity act;
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
System.out.println("Super init");
act = this;
}
public static void FacebookLogin() {
Session.openActiveSession(act, true, new Session.StatusCallback() {
// callback when session changes state
@Override
public void call(final Session session2, SessionState state, Exception exception) {
if (session2.isOpened()) {
Request.newMeRequest(session2, new Request.GraphUserCallback() {
// callback after Graph API response with user object
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
Log.d("Facebook", "Hello " + user.getName() + "! Id: "+user.getId());
isLoggedIn();
String mail = (String)response.getGraphObject().getProperty("email");
if (mail == null) {
mail = "null";
}
userID(user.getId(), mail, user.getName());
session = session2;
}
}
}).executeAsync();
}
}
});
}
}