facebook 与两个模块集成的问题

Trouble with facebook integration with two modules

我尝试为我的应用制作社交模块,类似于包装器,它将包含 google+、Facebook 和 twitter 集成模板。

我决定从Facebook入手,但我想不通我需要将两个模块的哪些数据放入Facebook API dashboard.

我有两个包名:

模块:com.example.denis.socialwrapper
应用程序:com.example.denis.socialapp

我的模块工程只有一个classFacebookTemplate
我的应用项目有 ActivityFragment

当我编译我的项目并按下 LoginButton 时,它只显示进度条。

这是我的 Facebook 模板 class,它位于模块中:

public class FacebookTemplate {
//template should has only one instance
private static FacebookTemplate facebookTemplate;

private String permissions;
private String requestFields;
private CallbackManager callbackManager; //fb callback
private LoginButton fbButton;
private FacebookCallback<LoginResult> callbackListener;
private GraphRequest.Callback graphAPIListener;

//========================================================================
//GET STATIC INSTANCE VIA DIFFERENT CONSTRUCTORS
//========================================================================

public static FacebookTemplate getInstance(){
    if(facebookTemplate==null){
        facebookTemplate = new FacebookTemplate();
        facebookTemplate.setPermissions("user_profile");
        facebookTemplate.setRequestFields("id,name");
        return facebookTemplate;
    }
    return facebookTemplate;
}

public FacebookTemplate() {
}

//you must invoke this method before debug
public void initFacebookIntegration(Context context){
    FacebookSdk.sdkInitialize(context);
}
//======================================================================
// CONFIGURING FACEBOOK INTEGRATION (FRAGMENT/ACTIVITY)
//======================================================================

public void configureFacebookUsingFragment(@NonNull Fragment fragment){
    callbackManager = CallbackManager.Factory.create();
    fbButton.setReadPermissions(permissions);
    fbButton.setFragment(fragment);
    // Callback registration
    fbButton.registerCallback(callbackManager, callbackListener);
}
public void configureFacebookUsingActivity(){
    callbackManager = CallbackManager.Factory.create();
    fbButton.setReadPermissions(permissions);
    // Callback registration
    fbButton.registerCallback(callbackManager, callbackListener);
}

//======================================================================
// GETTING RESULT OF onActivityResult()
//======================================================================

public void throwToOnActivityResult(int requestCode,int resultCode,Intent data){
    callbackManager.onActivityResult(requestCode, resultCode, data);
}

//======================================================================
// GETTERS AND SETTERS
//======================================================================
@NonNull
public CallbackManager getCallbackManager() {
    return callbackManager;
}

public LoginButton getFbButton() {
    return fbButton;
}

public void setPermissions(String permissions) {
    this.permissions = permissions;
}

public String getPermissions() {
    return permissions;
}

public String getRequestFields() {
    return requestFields;
}

public void setRequestFields(String requestFields) {
    this.requestFields = requestFields;
}

public void setFbButton(LoginButton fbButton) {
    this.fbButton = fbButton;
}

public void setCallbackListener(FacebookCallback<LoginResult> callbackListener) {
    this.callbackListener = callbackListener;
}

public void setGraphAPIListener(GraphRequest.Callback graphAPIListener) {
    this.graphAPIListener = graphAPIListener;
}
public interface GraphAPIListener extends GraphRequest.Callback{
    @Override
    void onCompleted(GraphResponse graphResponse);
}
public interface FacebookCallbackListener extends FacebookCallback<LoginResult>{
    @Override
    void onSuccess(LoginResult loginResult);

    @Override
    void onCancel();

    @Override
    void onError(FacebookException e);
}

}

在应用程序class中我初始化了Facebook SDK,这里是代码:

public class App extends Application {

private static FacebookTemplate FBTemplate;

@Override
public void onCreate() {
    super.onCreate();
    initFacebook();
}

private void initFacebook(){
    FBTemplate = FacebookTemplate.getInstance();
    FBTemplate.initFacebookIntegration(this);
}
public static FacebookTemplate getFacebookTemplate(){
    return FBTemplate;
}

}

这是我的片段:

public class MainFragment extends Fragment {

@Bind(R.id.facebook_button)LoginButton fbButton;
private FacebookTemplate facebookTemplate;
private static MainFragment fragment;
public static MainFragment getInstance(){
    if(fragment==null){
        fragment = new MainFragment();
        return fragment;
    }
    return fragment;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.main_fragment,container,false);
    ButterKnife.bind(this, v);
    configureFacebookAPI(null,null);
    return v;
}
private void configureFacebookAPI(@Nullable String permissions,@Nullable String requestFields){
    facebookTemplate = App.getFacebookTemplate();
    facebookTemplate.setFbButton(fbButton);
    if(permissions!=null) facebookTemplate.setPermissions(permissions);
    if(requestFields!=null) facebookTemplate.setRequestFields(requestFields);
    facebookTemplate.configureFacebookUsingFragment(this);
    facebookTemplate.setCallbackListener(callbackListener);
    facebookTemplate.setGraphAPIListener(graphAPIListener);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    facebookTemplate.throwToOnActivityResult(requestCode, resultCode, data);
}

@Override
public void onDestroyView() {
    super.onDestroyView();
    ButterKnife.unbind(this);
}

FacebookTemplate.FacebookCallbackListener callbackListener = new FacebookTemplate.FacebookCallbackListener() {
    @Override
    public void onSuccess(LoginResult loginResult) {

    }

    @Override
    public void onCancel() {

    }

    @Override
    public void onError(FacebookException e) {

    }
};

FacebookTemplate.GraphAPIListener graphAPIListener = new FacebookTemplate.GraphAPIListener() {
    @Override
    public void onCompleted(GraphResponse graphResponse) {

    }
};

}

模块的清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.denis.socialwrapper">


<application android:allowBackup="true" android:label="@string/app_name"
    android:icon="@mipmap/ic_launcher" android:theme="@style/AppTheme">
    <activity android:name="com.facebook.FacebookActivity"
        android:configChanges=
            "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:label="@string/app_name" />
    <meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/facebook_api_key"/>
</application>

应用的清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.denis.socialapp" >

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>

<application
    android:allowBackup="true"
    android:name=".App"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

仅尝试 com.example.denis。你只需要输入你的包裹名称。

与java"package"无所谓。重要的是 AndroidManifest 包。从那里仔细检查您的包裹。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mygreatapp.droid" > <----- THIS PACKAGE

........

</manifest>

我设置了不正确的权限;修复解决了我的问题。