-
Notifications
You must be signed in to change notification settings - Fork 30
/
FbConnectHelper.java
131 lines (112 loc) · 4.77 KB
/
FbConnectHelper.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package com.binarywalllabs.socialintegration.helpers;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookAuthorizationException;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.GraphRequest;
import com.facebook.GraphResponse;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import com.facebook.share.model.ShareLinkContent;
import com.facebook.share.widget.ShareDialog;
import org.json.JSONObject;
import java.util.Arrays;
import java.util.Collection;
/**
* FbConnectHelper.java
*/
public class FbConnectHelper {
private Collection<String> permissions = Arrays.asList("public_profile ", "email", "user_birthday", "user_location");
private CallbackManager callbackManager;
private LoginManager loginManager;
private ShareDialog shareDialog;
private Activity activity;
private Fragment fragment;
private OnFbSignInListener fbSignInListener;
/**
* Interface to listen the Facebook connect
*/
public interface OnFbSignInListener {
void OnFbSuccess(GraphResponse graphResponse);
void OnFbError(String errorMessage);
}
public FbConnectHelper(Activity activity, OnFbSignInListener fbSignInListener) {
this.activity = activity;
this.fbSignInListener = fbSignInListener;
}
public FbConnectHelper(Fragment fragment, OnFbSignInListener fbSignInListener) {
this.fragment = fragment;
this.fbSignInListener = fbSignInListener;
}
public FbConnectHelper(Activity activity) {
shareDialog = new ShareDialog(activity);
}
public FbConnectHelper(Fragment fragment) {
shareDialog = new ShareDialog(fragment);
}
public void connect() {
callbackManager = CallbackManager.Factory.create();
loginManager = LoginManager.getInstance();
if (activity != null)
loginManager.logInWithReadPermissions(activity, permissions);
else
loginManager.logInWithReadPermissions(fragment, permissions);
loginManager.registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
if (loginResult != null) {
callGraphAPI(loginResult.getAccessToken());
}
}
@Override
public void onCancel() {
fbSignInListener.OnFbError("User cancelled.");
}
@Override
public void onError(FacebookException exception) {
if (exception instanceof FacebookAuthorizationException) {
if (AccessToken.getCurrentAccessToken() != null) {
LoginManager.getInstance().logOut();
}
}
fbSignInListener.OnFbError(exception.getMessage());
}
});
}
private void callGraphAPI(AccessToken accessToken) {
GraphRequest request = GraphRequest.newMeRequest(
accessToken,
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
fbSignInListener.OnFbSuccess(response);
}
});
Bundle parameters = new Bundle();
//Explicitly we need to specify the fields to get values else some values will be null.
parameters.putString("fields", "id,birthday,email,first_name,gender,last_name,link,location,name");
request.setParameters(parameters);
request.executeAsync();
}
public void shareOnFBWall(String title, String description, String url) {
if (ShareDialog.canShow(ShareLinkContent.class)) {
ShareLinkContent linkContent = new ShareLinkContent.Builder()
.setContentTitle(title)
.setContentDescription(description)
.setContentUrl(Uri.parse(url))
.build();
shareDialog.show(linkContent);
}
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (callbackManager != null)
callbackManager.onActivityResult(requestCode, resultCode, data);
}
}