我使用C ++在cocos2dx上创建了一个游戏,现在我想将其与Facebook连接起来,要实现这一点,我需要使用JAVA进行操作,然后将其与JNI连接。两者都可以正常工作,但是要将其与Facebook连接,我需要@override方法onCreate(),但是我不知道如何从C ++ JNI调用该方法。
当我将Facebook代码移至新功能时,我需要执行此
Session.openActiveSession(this, true, new Session.StatusCallback() {}
但是,“ this”在onCreate()之外不存在。有任何想法吗?
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
最佳答案
我解决了
问题是您需要将其放在Cocos2dxActivity的主Actividty上,并指定onEnter act = this。行为是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();
}
}
});
}
}