java CreatePlatformSocket()失败:facebook登录Android期间不允许操作(1)
我有个错误:
E/chromium: [ERROR:socket_posix.cc(94)] CreatePlatformSocket() failed: Operation not permitted (1)
[ERROR:socket_posix.cc(94)] CreatePlatformSocket() failed: Operation not permitted (1)
当我在安卓应用程序中点击“使用facebook登录”时
Androidmanifest。xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
xmlns:tools="http://schemas.安卓.com/tools"
package="com.example.inzynierka">
<application
安卓:allowBackup="true"
安卓:icon="@mipmap/ic_launcher"
安卓:label="@string/app_name"
安卓:roundIcon="@mipmap/ic_launcher_round"
安卓:supportsRtl="true"
安卓:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning">
<activity
安卓:name=".PremiumActivity"
安卓:parentActivityName=".UserPanelActivity">
</activity>
<activity 安卓:name=".DailyChallengeActivity" />
<activity
安卓:name=".MyProgressActivity"
安卓:parentActivityName=".UserPanelActivity">
<meta-data
安卓:name="UserPanelActivity"
安卓:value=".UserPanelActivity" />
</activity>
<activity 安卓:name=".UserPanelActivity" />
<activity
安卓:name=".SettingsActivity"
安卓:parentActivityName=".UserPanelActivity">
<!-- The meta-data tag is required if you support API level 15 and lower -->
<meta-data
安卓:name="安卓.support.PARENT_ACTIVITY"
安卓:value=".MainActivity" />
</activity>
<activity
安卓:name=".ui.login.LoginActivity"
安卓:label="@string/title_activity_login"
安卓:parentActivityName=".MainActivity">
<meta-data
安卓:name="安卓.support.PARENT_ACTIVITY"
安卓:value=".MainActivity" />
</activity>
<activity 安卓:name=".MainActivity">
<intent-filter>
<action 安卓:name="安卓.intent.action.MAIN" />
<category 安卓:name="安卓.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data 安卓:name="com.facebook.sdk.ApplicationId"
安卓:value="@string/facebook_app_id"/>
<activity 安卓:name="com.facebook.FacebookActivity"
安卓:configChanges=
"keyboard|keyboardHidden|screenLayout|screenSize|orientation"
安卓:label="@string/app_name" />
<activity
安卓:name="com.facebook.CustomTabActivity"
安卓:exported="true">
<intent-filter>
<action 安卓:name="安卓.intent.action.VIEW" />
<category 安卓:name="安卓.intent.category.DEFAULT" />
<category 安卓:name="安卓.intent.category.BROWSABLE" />
<data 安卓:scheme="@string/fb_login_protocol_scheme" />
</intent-filter>
</activity>
</application>
<uses-permission 安卓:name="安卓.permission.INTERNET"/>
</manifest>
LoginActivity(我使用内置的登录活动):
package com.example.inzynierka.ui.login;
import 安卓.app.Activity;
import 安卓x.lifecycle.Observer;
import 安卓x.lifecycle.ViewModelProviders;
import 安卓.content.Intent;
import 安卓.os.Bundle;
import 安卓x.annotation.Nullable;
import 安卓x.annotation.StringRes;
import 安卓x.appcompat.app.AppCompatActivity;
import 安卓.text.Editable;
import 安卓.text.TextWatcher;
import 安卓.util.Log;
import 安卓.view.KeyEvent;
import 安卓.view.View;
import 安卓.view.inputmethod.EditorInfo;
import 安卓.widget.Button;
import 安卓.widget.EditText;
import 安卓.widget.ProgressBar;
import 安卓.widget.TextView;
import 安卓.widget.Toast;
import com.example.inzynierka.R;
import com.example.inzynierka.UserPanelActivity;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.login.widget.LoginButton;
public class LoginActivity extends AppCompatActivity {
private LoginViewModel loginViewModel;
public static CallbackManager callbackManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
callbackManager = CallbackManager.Factory.create();
loginViewModel = ViewModelProviders.of(this, new LoginViewModelFactory())
.get(LoginViewModel.class);
final EditText usernameEditText = findViewById(R.id.username);
final EditText passwordEditText = findViewById(R.id.password);
final Button loginButton = findViewById(R.id.login);
final ProgressBar loadingProgressBar = findViewById(R.id.loading);
loginViewModel.getLoginFormState().observe(this, new Observer<LoginFormState>() {
@Override
public void onChanged(@Nullable LoginFormState loginFormState) {
if (loginFormState == null) {
return;
}
loginButton.setEnabled(loginFormState.isDataValid());
if (loginFormState.getUsernameError() != null) {
usernameEditText.setError(getString(loginFormState.getUsernameError()));
}
if (loginFormState.getPasswordError() != null) {
passwordEditText.setError(getString(loginFormState.getPasswordError()));
}
}
});
loginViewModel.getLoginResult().observe(this, new Observer<LoginResult>() {
@Override
public void onChanged(@Nullable LoginResult loginResult) {
if (loginResult == null) {
return;
}
loadingProgressBar.setVisibility(View.GONE);
if (loginResult.getError() != null) {
showLoginFailed(loginResult.getError());
}
if (loginResult.getSuccess() != null) {
updateUiWithUser(loginResult.getSuccess());
}
setResult(Activity.RESULT_OK);
//Complete and destroy login activity once successful
finish();
}
});
TextWatcher afterTextChangedListener = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// ignore
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// ignore
}
@Override
public void afterTextChanged(Editable s) {
loginViewModel.loginDataChanged(usernameEditText.getText().toString(),
passwordEditText.getText().toString());
}
};
usernameEditText.addTextChangedListener(afterTextChangedListener);
passwordEditText.addTextChangedListener(afterTextChangedListener);
passwordEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
loginViewModel.login(usernameEditText.getText().toString(),
passwordEditText.getText().toString());
}
return false;
}
});
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
loadingProgressBar.setVisibility(View.VISIBLE);
loginViewModel.login(usernameEditText.getText().toString(),
passwordEditText.getText().toString());
UserPanel();
}
});
}
private void UserPanel() {
Intent intent = new Intent(this, UserPanelActivity.class);
startActivity(intent);
}
private void updateUiWithUser(LoggedInUserView model) {
String welcome = getString(R.string.welcome) + model.getDisplayName();
// TODO : initiate successful logged in experience
Toast.makeText(getApplicationContext(), welcome, Toast.LENGTH_LONG).show();
}
private void showLoginFailed(@StringRes Integer errorString) {
Toast.makeText(getApplicationContext(), errorString, Toast.LENGTH_SHORT).show();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
}
片段(仅在片段中更改):
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_facebook, container, false);
LoginButton loginButton = view.findViewById(R.id.login_fbbutton);
loginButton.setReadPermissions("user_friends");
loginButton.setReadPermissions("public_profile");
loginButton.setReadPermissions("email");
loginButton.setReadPermissions("user_birthday");
// If using in a fragment
loginButton.setFragment(this);
// Other app specific specialization
// Callback registration
loginButton.registerCallback(LoginActivity.callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
System.out.println("Success");
}
@Override
public void onCancel() {
System.out.println("onCancel");
}
@Override
public void onError(FacebookException error) {
System.out.println("ERROR");
}
});
return view;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
callbackManager.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}
在MainActivity之后,我进入了LoginActivity,当我点击Facebook按钮时,一个窗口会出现一段时间,然后隐藏。 当然,我做的每件事都像是在Facebook上为开发者写的
顺便说一句,在我的buildgradle中我有:
implementation 'com.facebook.安卓:facebook-安卓-sdk:4.33.0'
因为CallbackManager只起作用。新版本上有错误
提前感谢您的帮助
共 (0) 个答案