Php Can';当我导出应用程序时,请不要登录Facebook
我用FacebookSDK构建了一个应用程序,Emulator上的一切都很好,但是当我导出我的应用程序在我的移动设备上运行时,我无法登录,这很令人沮丧,因为这是我的第一个应用程序,我认为一切都正常工作 我的登录也可以作为注册按钮使用。当没有帐户的人尝试登录时,它会使用Facebook的数据自动创建一个帐户 我使用PHP将数据插入数据库,当有人尝试登录时,我调用此函数:Php Can';当我导出应用程序时,请不要登录Facebook,php,android,facebook,Php,Android,Facebook,我用FacebookSDK构建了一个应用程序,Emulator上的一切都很好,但是当我导出我的应用程序在我的移动设备上运行时,我无法登录,这很令人沮丧,因为这是我的第一个应用程序,我认为一切都正常工作 我的登录也可以作为注册按钮使用。当没有帐户的人尝试登录时,它会使用Facebook的数据自动创建一个帐户 我使用PHP将数据插入数据库,当有人尝试登录时,我调用此函数: case "loginfb": facebook_func($_POST['email'],$_POST['na
case "loginfb":
facebook_func($_POST['email'],$_POST['name'],$_POST['gender'],$_POST['image']);
我的函数调用一个查询来检查发送的电子邮件是否已经存在,以便进行正常登录,否则,它将创建一个新帐户
function facebook_func($email,$name,$gender,$image){
$result = db_queries("SELECT * FROM users WHERE email='$email'");
$row = mysqli_fetch_array($result);
if($row[16] == 1){ //row 16 check if the account uses social network login
if($row[0]){ //Check if the id exists on database
echo $row[0];
online_func($row[3],$row[0]);
}else{
//Inserts new account into the Database
//echo id from the user
}
}
我回显用户的Id以将其保存在Java会话中
会话代码:
public class NewSession extends Application {
Session session = new Session();
public String getUserId() {
return session.suserid;
}
}
我的主要活动完整代码:
public class MainActivity extends Activity {
private EditText email, password;
private TextView status;
private CallbackManager callbackManager;
private LoginButton loginButton;
@Override
protected void onActivityResult(int requestCode, int responseCode, Intent data) {
super.onActivityResult(requestCode, responseCode, data);
callbackManager.onActivityResult(requestCode, responseCode, data);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(this.getApplicationContext());
setContentView(R.layout.activity_main);
email = (EditText) findViewById(R.id.email);
password = (EditText) findViewById(R.id.password);
status = (TextView) findViewById(R.id.statusField);
callbackManager = CallbackManager.Factory.create();
loginButton = (LoginButton) findViewById(R.id.login_button);
List < String > permissionNeeds = Arrays.asList("user_photos", "email");
loginButton.setReadPermissions(permissionNeeds);
loginButton.registerCallback(callbackManager, new FacebookCallback < LoginResult > () {@Override
public void onSuccess(LoginResult loginResult) {
System.out.println("onSuccess");
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object,
GraphResponse response) {
// TODO Auto-generated method stub
// Application code
Log.v("LoginActivity", response.toString());
//System.out.println("Check: " + response.toString());
try {
String id = object.getString("id");
String name = object.getString("name");
String image = "http://graph.facebook.com/" + id + "/picture?width=600&height=600";
String email = object.getString("email");
String gender = object.getString("gender");
String getgender = "";
if (getgender.equals("male")) {
getgender = "2";
} else {
getgender = "1";
}
facebookLogin(email, name, getgender, image);
} catch (JSONException e) {
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
System.out.println("onCancel");
}
@Override
public void onError(FacebookException exception) {
System.out.println("onError");
Log.v("LoginActivity", exception.getCause().toString());
}
});
}
public void login(View view) {
String getemail = email.getText().toString();
String getpassword = password.getText().toString();
new SigninActivity(this, status).execute(getemail, getpassword);
}
public void facebookLogin(String email, String name, String gender, String image) {
new FBSigninActivity(this, status).execute(email, name, gender, image);
Toast.makeText(getBaseContext(), "...",
Toast.LENGTH_LONG).show();
}
}
公共类MainActivity扩展活动{
私人编辑文本电子邮件,密码;
私有文本视图状态;
私人CallbackManager CallbackManager;
私人登录按钮登录按钮;
@凌驾
ActivityResult上受保护的void(int请求代码、int响应代码、意图数据){
super.onActivityResult(请求代码、响应代码、数据);
callbackManager.onActivityResult(请求代码、响应代码、数据);
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
sdkinInitialize(this.getApplicationContext());
setContentView(R.layout.activity_main);
email=(EditText)findviewbyd(R.id.email);
密码=(EditText)findViewById(R.id.password);
状态=(TextView)findViewById(R.id.statusField);
callbackManager=callbackManager.Factory.create();
loginButton=(loginButton)findviewbyd(R.id.login_按钮);
ListpermissionNeeds=Arrays.asList(“用户照片”、“电子邮件”);
setReadPermissions(permissionNeeds);
registerCallback(callbackManager,newfacebookcallback(){@Override
成功时公共无效(LoginResult LoginResult){
System.out.println(“onSuccess”);
GraphRequest request=GraphRequest.NewMereRequest(loginResult.getAccessToken(),new GraphRequest.GraphJSONObjectCallback()){
@凌驾
未完成的公共void(JSONObject对象,
GraphResponse(反应){
//TODO自动生成的方法存根
//应用程序代码
Log.v(“LoginActivity”,response.toString());
//System.out.println(“检查:+response.toString());
试一试{
stringid=object.getString(“id”);
字符串名称=object.getString(“名称”);
字符串图像=”http://graph.facebook.com/“+id+”/图片?宽度=600,高度=600”;
String email=object.getString(“email”);
字符串性别=object.getString(“性别”);
字符串getgender=“”;
if(getgender.equals(“男性”)){
getgender=“2”;
}否则{
getgender=“1”;
}
facebookLogin(电子邮件、姓名、性别、图像);
}捕获(JSONException e){
e、 printStackTrace();
}
}
});
Bundle参数=新Bundle();
参数.putString(“字段”、“id、姓名、电子邮件、性别”);
请求。设置参数(参数);
request.executeAsync();
}
@凌驾
公开作废{
System.out.println(“onCancel”);
}
@凌驾
public void onError(facebook异常){
System.out.println(“onError”);
Log.v(“LoginActivity”,exception.getCause().toString());
}
});
}
公共无效登录(查看){
字符串getemail=email.getText().toString();
字符串getpassword=password.getText().toString();
新的重要性(此,状态)。执行(getemail,getpassword);
}
public void facebook登录(字符串电子邮件、字符串名称、字符串性别、字符串图像){
新FBSignality(此,状态)。执行(电子邮件、姓名、性别、图像);
Toast.makeText(getBaseContext(),“…”,
Toast.LENGTH_LONG).show();
}
}
我的facebook登录类
public class FBSigninActivity extends AsyncTask < String, Void, String > {
private TextView statusField;
private Context context;
private static final int LONG_DELAY = 3500; // 3.5 seconds
public FBSigninActivity(Context context, TextView statusField) {
this.context = context;
this.statusField = statusField;
}
@Override
protected String doInBackground(String...arg0) {
try {
String getemail = (String) arg0[0];
String getname = (String) arg0[1];
String getgender = (String) arg0[2];
String getimage = (String) arg0[3];
String link = "http://www.website.pt/Android/index.php?section=loginfb";
String data = URLEncoder.encode("email", "UTF-8") + "=" + URLEncoder.encode(getemail, "UTF-8");
data += "&" + URLEncoder.encode("name", "UTF-8") + "=" + URLEncoder.encode(getname, "UTF-8");
data += "&" + URLEncoder.encode("gender", "UTF-8") + "=" + URLEncoder.encode(getgender, "UTF-8");
data += "&" + URLEncoder.encode("image", "UTF-8") + "=" + URLEncoder.encode(getimage, "UTF-8");
URL url = new URL(link);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("user", "pass".toCharArray());
}
});
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
// Read Server Response
while ((line = reader.readLine()) != null) {
sb.append(line);
break;
}
return sb.toString();
} catch (Exception e) {
return new String("Exception: " + e.getMessage());
}
}
@Override
protected void onPostExecute(String result) {
if (result == "") {
Toast.makeText(context, "shows error",
Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context, "welcome message",
Toast.LENGTH_LONG).show();
String newuser = result.substring(0, 1);
String newid = result.substring(1);
if (newuser.equals("N")) {
Toast.makeText(context, "...",
Toast.LENGTH_LONG).show();
Session.suserid = newid;
Intent in = new Intent(context,
editProfile.class);
in .putExtra("checku", "new");
context.startActivity( in );
}else{
context.startActivity(new Intent(context, ListUsersActivity.class));
Session.suserid = result;
}
}
}
}
公共类FBSignenActivity扩展了AsyncTask{
私有文本视图状态字段;
私人语境;
专用静态最终整数长_延迟=3500;//3.5秒
公共FBSignatureActivity(上下文、文本视图状态字段){
this.context=上下文;
this.statusField=statusField;
}
@凌驾
受保护的字符串doInBackground(字符串…arg0){
试一试{
字符串getemail=(字符串)arg0[0];
字符串getname=(字符串)arg0[1];
字符串getgender=(字符串)arg0[2];
字符串getimage=(字符串)arg0[3];
字符串链接=”http://www.website.pt/Android/index.php?section=loginfb";
字符串数据=urlcoder.encode(“电子邮件”,“UTF-8”)+“=”+urlcoder.encode(getemail,“UTF-8”);
数据+=“&”+URLEncoder.encode(“名称”,“UTF-8”)+“=”+URLEncoder.encode(getname,“UTF-8”);
数据+=“&”+URLEncoder.encode(“性别”,“UTF-8”)+“=”+URLEncoder.encode(getgender,“UTF-8”);
数据+=“&”+URLEncoder.encode(“图像”,“UTF-8”)+“=”+URLEncoder.encode(getimage,“UTF-8”);
URL=新的URL(链接);
URLConnection conn=url.openConnect