├── .gitignore
├── README.md
├── android
└── FacebookSdk.java
├── ios
├── FacebookSdk.h
└── FacebookSdk.mm
└── ts
└── Facebook.ts
/.gitignore:
--------------------------------------------------------------------------------
1 | *.DS_Store
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # cocos_creator_facebook_sdk
2 | cocos creator 2.2.2 android和ios原生平台接入facebook登录和分享
3 |
--------------------------------------------------------------------------------
/android/FacebookSdk.java:
--------------------------------------------------------------------------------
1 | package com.example.myapp;
2 |
3 | import android.app.Activity;
4 | import android.content.Intent;
5 | import android.graphics.Bitmap;
6 | import android.graphics.BitmapFactory;
7 | import android.net.Uri;
8 | import android.os.Bundle;
9 | import android.util.Log;
10 |
11 | import com.facebook.AccessToken;
12 | import com.facebook.CallbackManager;
13 | import com.facebook.FacebookCallback;
14 | import com.facebook.FacebookException;
15 | import com.facebook.GraphRequest;
16 | import com.facebook.GraphResponse;
17 | import com.facebook.login.LoginManager;
18 | import com.facebook.login.LoginResult;
19 | import com.facebook.share.Sharer;
20 | import com.facebook.share.model.ShareLinkContent;
21 | import com.facebook.share.model.SharePhoto;
22 | import com.facebook.share.model.SharePhotoContent;
23 | import com.facebook.share.widget.ShareDialog;
24 |
25 | import org.cocos2dx.lib.Cocos2dxHelper;
26 | import org.cocos2dx.lib.Cocos2dxJavascriptJavaBridge;
27 | import org.json.JSONException;
28 | import org.json.JSONObject;
29 |
30 | import java.util.Arrays;
31 | import java.util.Collection;
32 |
33 | //AndroidManifest.xml
34 | //
35 | //
38 | //
39 | //
43 | //
46 | //
47 | //
48 | //
49 | //
50 | //
51 | //
52 | //
53 | //
54 | //
55 | //
56 | //
57 | //
61 | //
62 |
63 | public class FacebookSdk {
64 | private static String TAG = "FacebookSdk";
65 | private static FacebookSdk mInstance = null;
66 | private Activity mActivity = null;
67 | private CallbackManager mCallbackManager = null;
68 | private ShareDialog mShareDialog = null;
69 |
70 | public static FacebookSdk getInstance() {
71 | if (null == mInstance) {
72 | mInstance = new FacebookSdk();
73 | }
74 | return mInstance;
75 | }
76 |
77 | /**
78 | * 监听 onActivityResult
79 | */
80 | public void onActivityResult(int requestCode, int resultCode, Intent data) {
81 | Log.i(TAG, "onActivityResult data = " + data.toString());
82 |
83 | if (mCallbackManager != null) {
84 | mCallbackManager.onActivityResult(requestCode, resultCode, data);
85 | }
86 | }
87 |
88 | /**
89 | * 初始化
90 | */
91 | public void initSdk(Activity activity) {
92 | Log.i(TAG, "initSdk");
93 |
94 | mActivity = activity;
95 | mCallbackManager = CallbackManager.Factory.create();
96 |
97 | initLogin();
98 | initShare();
99 | }
100 |
101 | /**
102 | * 初始化登录
103 | */
104 | private void initLogin() {
105 | Log.i(TAG, "initLogin");
106 |
107 | LoginManager.getInstance().registerCallback(mCallbackManager, new FacebookCallback() {
108 | @Override
109 | public void onSuccess(LoginResult loginResult) {
110 | Log.e(TAG, "login onSuccess loginResult = " + loginResult.toString());
111 |
112 | //获取授权信息
113 | requestAuthInfo();
114 | }
115 |
116 | @Override
117 | public void onCancel() {
118 | Log.e(TAG, "login onCancel");
119 |
120 | //通知js
121 | final String eval = String.format("cc.onFacebookLoginCancel()");
122 | Cocos2dxHelper.runOnGLThread(new Runnable() {
123 | @Override
124 | public void run() {
125 | try {
126 | Cocos2dxJavascriptJavaBridge.evalString(eval);
127 | } catch (Exception e) {
128 | e.printStackTrace();
129 | }
130 | }
131 | });
132 | }
133 |
134 | @Override
135 | public void onError(FacebookException error) {
136 | Log.e(TAG, "login onError error = " + error.toString());
137 |
138 | //通知js
139 | final String eval = String.format("cc.onFacebookLoginError('%s')", error.toString());
140 | Cocos2dxHelper.runOnGLThread(new Runnable() {
141 | @Override
142 | public void run() {
143 | try {
144 | Cocos2dxJavascriptJavaBridge.evalString(eval);
145 | } catch (Exception e) {
146 | e.printStackTrace();
147 | }
148 | }
149 | });
150 | }
151 | });
152 | }
153 |
154 | /**
155 | * 登录
156 | */
157 | public void login() {
158 | Log.i(TAG, "login");
159 |
160 | if (isAuthorization()) {
161 | //已经授权
162 | requestAuthInfo();
163 | return;
164 | }
165 |
166 | Collection permissions = Arrays.asList("public_profile", "email");
167 | LoginManager.getInstance().logInWithReadPermissions(mActivity, permissions);
168 | }
169 |
170 | /**
171 | * 是否授权
172 | */
173 | private boolean isAuthorization(){
174 | AccessToken accessToken = AccessToken.getCurrentAccessToken();
175 | if (accessToken == null) {
176 | return false;
177 | }
178 |
179 | return !accessToken.isExpired();
180 | }
181 |
182 | /**
183 | * 获取授权信息
184 | */
185 | private void requestAuthInfo() {
186 | Log.i(TAG, "requestAuthInfo");
187 |
188 | AccessToken accessToken = AccessToken.getCurrentAccessToken();
189 | GraphRequest graphRequest = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
190 | @Override
191 | public void onCompleted(JSONObject object, GraphResponse response) {
192 | Log.e(TAG, "requestAuthInfo onCompleted object = " + object.toString() + " response = " + response.toString());
193 |
194 | if (response.getError() != null) {
195 | //授权错误
196 | //通知js
197 | final String eval = String.format("cc.onFacebookLoginError('%s')", response.getError().getErrorMessage());
198 | Cocos2dxHelper.runOnGLThread(new Runnable() {
199 | @Override
200 | public void run() {
201 | try {
202 | Cocos2dxJavascriptJavaBridge.evalString(eval);
203 | } catch (Exception e) {
204 | e.printStackTrace();
205 | }
206 | }
207 | });
208 | return;
209 | }
210 |
211 | //id:1565455221565
212 | String id = object.optString("id");
213 | //昵称:Zhang San
214 | String name = object.optString("name");
215 | //性别:比如 male (男) female (女)
216 | String gender = object.optString("gender");
217 | //邮箱:比如:56236545@qq.com
218 | String email = object.optString("email");
219 | //头像
220 | String picture = "";
221 | JSONObject objPicture = object.optJSONObject("picture");
222 | if (objPicture != null) {
223 | JSONObject objPictureData = objPicture.optJSONObject("data");
224 | if (objPictureData != null) {
225 | picture = objPictureData.optString("url");
226 | }
227 | }
228 | //头像
229 | String avatar = String.format("https://graph.facebook.com/%s/picture?type=large", id);
230 | String authInfo = String.format("{\"id\":\"%s\",\"name\":\"%s\",\"gender\":\"%s\",\"email\":\"%s\",\"picture\":\"%s\",\"avatar\":\"%s\"}",
231 | id, name, gender, email, picture, avatar);
232 |
233 | //通知js
234 | final String eval = String.format("cc.onFacebookLoginSuccess('%s')", authInfo);
235 | Cocos2dxHelper.runOnGLThread(new Runnable() {
236 | @Override
237 | public void run() {
238 | try {
239 | Cocos2dxJavascriptJavaBridge.evalString(eval);
240 | } catch (Exception e) {
241 | e.printStackTrace();
242 | }
243 | }
244 | });
245 | }
246 | });
247 |
248 | Bundle param = new Bundle();
249 | param.putString("fields", "id,name,gender,email,picture");
250 | graphRequest.setParameters(param);
251 | graphRequest.executeAsync();
252 | }
253 |
254 | /**
255 | * 登出
256 | */
257 | public void logout() {
258 | Log.i(TAG, "logout");
259 |
260 | LoginManager.getInstance().logOut();
261 | }
262 |
263 | /**
264 | * 初始化分享
265 | */
266 | private void initShare() {
267 | Log.i(TAG, "initShare");
268 |
269 | mShareDialog = new ShareDialog(mActivity);
270 | mShareDialog.registerCallback(mCallbackManager, new FacebookCallback() {
271 | @Override
272 | public void onSuccess(Sharer.Result result) {
273 | Log.e(TAG, "share onSuccess result = " + result.toString());
274 |
275 | //通知js
276 | final String eval = String.format("cc.onFacebookShareSuccess('%s')", result.toString());
277 | Cocos2dxHelper.runOnGLThread(new Runnable() {
278 | @Override
279 | public void run() {
280 | try {
281 | Cocos2dxJavascriptJavaBridge.evalString(eval);
282 | } catch (Exception e) {
283 | e.printStackTrace();
284 | }
285 | }
286 | });
287 | }
288 |
289 | @Override
290 | public void onCancel() {
291 | Log.e(TAG, "share onCancel");
292 |
293 | //通知js
294 | final String eval = String.format("cc.onFacebookShareCancel()");
295 | Cocos2dxHelper.runOnGLThread(new Runnable() {
296 | @Override
297 | public void run() {
298 | try {
299 | Cocos2dxJavascriptJavaBridge.evalString(eval);
300 | } catch (Exception e) {
301 | e.printStackTrace();
302 | }
303 | }
304 | });
305 | }
306 |
307 | @Override
308 | public void onError(FacebookException error) {
309 | Log.e(TAG, "share onError error = " + error.toString());
310 |
311 | //通知js
312 | final String eval = String.format("cc.onFacebookShareError('%s')", error.toString());
313 | Cocos2dxHelper.runOnGLThread(new Runnable() {
314 | @Override
315 | public void run() {
316 | try {
317 | Cocos2dxJavascriptJavaBridge.evalString(eval);
318 | } catch (Exception e) {
319 | e.printStackTrace();
320 | }
321 | }
322 | });
323 | }
324 | });
325 | }
326 |
327 | /**
328 | * 分享
329 | */
330 | public void share(String shareInfo) {
331 | Log.i(TAG, "share shareInfo = " + shareInfo);
332 |
333 | try {
334 | JSONObject json = new JSONObject(shareInfo);
335 | int shareType = json.getInt("shareType");
336 | String shareUrl = json.getString("shareUrl");
337 | String imgPath = json.getString("imgPath");
338 |
339 | if (shareType == 0) {
340 | //链接
341 | if (ShareDialog.canShow(ShareLinkContent.class)) {
342 | ShareLinkContent content = new ShareLinkContent.Builder()
343 | .setContentUrl(Uri.parse(shareUrl))
344 | .build();
345 | mShareDialog.show(content);
346 | }
347 | } else if (shareType == 1) {
348 | //图片
349 | if (ShareDialog.canShow(SharePhotoContent.class)) {
350 | Bitmap img = BitmapFactory.decodeFile(imgPath);
351 | SharePhoto photo = new SharePhoto.Builder()
352 | .setBitmap(img)
353 | .build();
354 | SharePhotoContent content = new SharePhotoContent.Builder()
355 | .addPhoto(photo)
356 | .build();
357 | mShareDialog.show(content);
358 | }
359 | }
360 | } catch (JSONException e) {
361 | e.printStackTrace();
362 | }
363 | }
364 | }
365 |
--------------------------------------------------------------------------------
/ios/FacebookSdk.h:
--------------------------------------------------------------------------------
1 | #ifndef FacebookSdk_h
2 | #define FacebookSdk_h
3 |
4 | #import
5 | #import "RootViewController.h"
6 |
7 | @interface FacebookSdk : NSObject
8 |
9 | + (instancetype)getInstance;
10 |
11 | /**
12 | 初始化
13 | */
14 | - (void)initSdk:(RootViewController *)viewController;
15 |
16 | /**
17 | 登录
18 | */
19 | - (void)login;
20 |
21 | /**
22 | 登出
23 | */
24 | - (void)logout;
25 |
26 | /**
27 | 分享
28 | @param shareInfo 分享信息
29 | */
30 | - (void)share:(NSString *)shareInfo;
31 |
32 | @end
33 |
34 | #endif /* FacebookSdk_h */
35 |
--------------------------------------------------------------------------------
/ios/FacebookSdk.mm:
--------------------------------------------------------------------------------
1 | #import "FacebookSdk.h"
2 |
3 | #import
4 | #import
5 | #import
6 |
7 | #include "cocos/scripting/js-bindings/jswrapper/SeApi.h"
8 |
9 | //Info.plist
10 | //CFBundleURLTypes
11 | //
12 | //
13 | // CFBundleURLSchemes
14 | //
15 | // fb{你的应用id}
16 | //
17 | //
18 | //
19 | //FacebookAppID
20 | //{你的应用id}
21 | //FacebookDisplayName
22 | //{你的应用名称}
23 | //LSApplicationQueriesSchemes
24 | //
25 | // fbapi
26 | // fbapi20130214
27 | // fbapi20130410
28 | // fbapi20130702
29 | // fbapi20131010
30 | // fbapi20131219
31 | // fbapi20140410
32 | // fbapi20140116
33 | // fbapi20150313
34 | // fbapi20150629
35 | // fbapi20160328
36 | // fbauth
37 | // fb-messenger-share-api
38 | // fbauth2
39 | // fbshareextension
40 | //
41 |
42 | /**
43 | 结果类型
44 | */
45 | typedef NS_ENUM(NSInteger, ResultType) {
46 | ResultTypeLoginSuccess, //登录成功
47 | ResultTypeLoginCancel, //登录取消
48 | ResultTypeLoginError, //登录错误
49 | ResultTypeShareSuccess, //分享成功
50 | ResultTypeShareCancel, //分项取消
51 | ResultTypeShareError, //分享错误
52 | };
53 |
54 | @interface FacebookSdk() {
55 |
56 | }
57 |
58 | @property (nonatomic, strong) RootViewController *viewController;
59 |
60 | @property (nonatomic, strong) FBSDKLoginManager *loginManager;
61 |
62 | @end
63 |
64 | @implementation FacebookSdk
65 |
66 | #pragma mark - 单例方法
67 |
68 | static FacebookSdk *mInstace = nil;
69 |
70 | + (instancetype)getInstance {
71 | static dispatch_once_t onceToken;
72 | dispatch_once(&onceToken, ^{
73 | mInstace = [[FacebookSdk alloc] init];
74 | });
75 | return mInstace;
76 | }
77 |
78 | #pragma mark - 初始化
79 |
80 | /**
81 | 初始化
82 | */
83 | - (void)initSdk:(RootViewController *)viewController {
84 | NSLog(@"%s", __FUNCTION__);
85 |
86 | self.viewController = viewController;
87 |
88 | [self initLogin];
89 | [self initShare];
90 | }
91 |
92 | #pragma mark - 登录
93 |
94 | /**
95 | 初始化登录
96 | */
97 | - (void)initLogin {
98 | NSLog(@"%s", __FUNCTION__);
99 |
100 | self.loginManager = [[FBSDKLoginManager alloc] init];
101 | }
102 |
103 | /**
104 | 登录
105 | */
106 | - (void)login {
107 | NSLog(@"%s", __FUNCTION__);
108 |
109 | if ([self isAuthorization]) {
110 | //已经授权
111 | [self requestAuthInfo];
112 | return;
113 | }
114 |
115 | [self.loginManager logInWithPermissions:@[@"public_profile", @"email"]
116 | fromViewController:self.viewController handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
117 | NSLog(@"%s, FBSDKLoginManagerLoginResult, result: %@, error: %@", __FUNCTION__, result, error);
118 |
119 | if (error) {
120 | //登录错误
121 | NSLog(@"%s, FBSDKLoginManagerLoginResult error", __FUNCTION__);
122 |
123 | [self notifyToJs:ResultTypeLoginError params:[NSString stringWithFormat:@"%ld", (long)error.code]];
124 | return;
125 | }
126 |
127 | if (result) {
128 | if (result.isCancelled) {
129 | //登录取消
130 | NSLog(@"%s, FBSDKLoginManagerLoginResult cancel", __FUNCTION__);
131 |
132 | [self notifyToJs:ResultTypeLoginCancel params:@"login cancel"];
133 | return;
134 | }
135 |
136 | //登录成功
137 | NSLog(@"%s, FBSDKLoginManagerLoginResult success", __FUNCTION__);
138 |
139 | //获取授权信息
140 | [self requestAuthInfo];
141 | }
142 | }];
143 | }
144 |
145 | /**
146 | 是否授权
147 | */
148 | - (BOOL)isAuthorization {
149 | NSLog(@"%s", __FUNCTION__);
150 |
151 | FBSDKAccessToken *accessToken = [FBSDKAccessToken currentAccessToken];
152 | if (accessToken == nil) {
153 | return NO;
154 | }
155 |
156 | return !accessToken.isExpired;
157 | }
158 |
159 | /**
160 | 获取授权信息
161 | */
162 | - (void)requestAuthInfo {
163 | NSLog(@"%s", __FUNCTION__);
164 |
165 | FBSDKAccessToken *accessToken = [FBSDKAccessToken currentAccessToken];
166 | NSDictionary *params = @{@"fields":@"id,name,gender,email,picture"};
167 | FBSDKGraphRequest *graphRequest = [[FBSDKGraphRequest alloc]
168 | initWithGraphPath:accessToken.userID
169 | parameters:params];
170 | [graphRequest startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
171 | id result,
172 | NSError *error) {
173 | NSLog(@"%s, FBSDKGraphRequestConnection, result: %@, error: %@", __FUNCTION__, result, error);
174 |
175 | if (error) {
176 | //授权错误
177 | NSLog(@"%s, FBSDKGraphRequestConnection error", __FUNCTION__);
178 |
179 | [self notifyToJs:ResultTypeLoginError params:[NSString stringWithFormat:@"%ld", (long)error.code]];
180 | return;
181 | }
182 |
183 | if (result) {
184 | //授权成功
185 | NSLog(@"%s, FBSDKGraphRequestConnection success", __FUNCTION__);
186 |
187 | NSString *NSid = [result objectForKey:@"id"];
188 | NSString *name = [result objectForKey:@"name"];
189 | NSString *gender = [result objectForKey:@"gender"];
190 | NSString *email = [result objectForKey:@"email"];
191 | NSString *picture = @"";
192 | NSDictionary *objPicture = [result objectForKey:@"picture"];
193 | if (objPicture) {
194 | NSDictionary *objPictureData = [objPicture objectForKey:@"data"];
195 | if (objPictureData) {
196 | NSString *NSpictureDataUrl = [objPictureData objectForKey:@"url"];
197 | if (NSpictureDataUrl) {
198 | picture = NSpictureDataUrl;
199 | }
200 | }
201 | }
202 | NSString *avatar = [NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?type=large", NSid];
203 | NSString *authInfo = [NSString stringWithFormat:@"{\"id\":\"%@\",\"name\":\"%@\",\"gender\":\"%@\",\"email\":\"%@\",\"picture\":\"%@\",\"avatar\":\"%@\"}",
204 | NSid, name, gender, email, picture, avatar];
205 |
206 | [self notifyToJs:ResultTypeLoginSuccess params:authInfo];
207 | }
208 | }];
209 | }
210 |
211 | /**
212 | 登出
213 | */
214 | - (void)logout {
215 | NSLog(@"%s", __FUNCTION__);
216 |
217 | [self.loginManager logOut];
218 | }
219 |
220 | #pragma mark - 分享
221 |
222 | /**
223 | 初始化分享
224 | */
225 | - (void)initShare {
226 | NSLog(@"%s", __FUNCTION__);
227 | }
228 |
229 | /**
230 | 分享
231 | @param shareInfo 分享信息
232 | */
233 | - (void)share:(NSString *)shareInfo {
234 | NSLog(@"%s, shareInfo: %@", __FUNCTION__, shareInfo);
235 |
236 | NSData *data = [shareInfo dataUsingEncoding:NSUTF8StringEncoding];
237 | NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
238 | NSNumber *shareType = [dictionary objectForKey:@"shareType"];
239 | NSString *shareUrl = [dictionary objectForKey:@"shareUrl"];
240 | NSString *imgPath = [dictionary objectForKey:@"imgPath"];
241 |
242 | if ([shareType intValue] == 0) {
243 | //链接
244 | FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
245 | content.contentURL = [NSURL URLWithString:shareUrl];
246 |
247 | [FBSDKShareDialog showFromViewController:self.viewController
248 | withContent:content
249 | delegate:self];
250 | } else if ([shareType intValue] == 1) {
251 | //图片
252 | UIImage *image = [[UIImage alloc] initWithContentsOfFile:imgPath];
253 |
254 | FBSDKSharePhoto *photo = [[FBSDKSharePhoto alloc] init];
255 | photo.image = image;
256 | photo.userGenerated = YES;
257 |
258 | FBSDKSharePhotoContent *content = [[FBSDKSharePhotoContent alloc] init];
259 | content.photos = @[photo];
260 |
261 | [FBSDKShareDialog showFromViewController:self.viewController
262 | withContent:content
263 | delegate:self];
264 | }
265 | }
266 |
267 | #pragma mark - FBSDKSharingDelegate
268 |
269 | /**
270 | Sent to the delegate when the share completes without error or cancellation.
271 | @param sharer The FBSDKSharing that completed.
272 | @param results The results from the sharer. This may be nil or empty.
273 | */
274 | - (void)sharer:(id)sharer didCompleteWithResults:(NSDictionary *)results {
275 | NSLog(@"%s, results: %@", __FUNCTION__, results);
276 |
277 | [self notifyToJs:ResultTypeShareSuccess params:@"share success"];
278 | }
279 |
280 | /**
281 | Sent to the delegate when the sharer encounters an error.
282 | @param sharer The FBSDKSharing that completed.
283 | @param error The error.
284 | */
285 | - (void)sharer:(id)sharer didFailWithError:(NSError * _Nullable)error {
286 | NSLog(@"%s, error: %@", __FUNCTION__, error);
287 |
288 | [self notifyToJs:ResultTypeShareError params:[NSString stringWithFormat:@"%ld", (long)error.code]];
289 | }
290 |
291 | /**
292 | Sent to the delegate when the sharer is cancelled.
293 | @param sharer The FBSDKSharing that completed.
294 | */
295 | - (void)sharerDidCancel:(id)sharer {
296 | NSLog(@"%s", __FUNCTION__);
297 |
298 | [self notifyToJs:ResultTypeShareCancel params:@"share cancel"];
299 | }
300 |
301 | #pragma mark - 通知js
302 |
303 | /**
304 | 通知js
305 | @param resultType 类型
306 | @param params 透传参数
307 | */
308 | - (void)notifyToJs:(ResultType)resultType params:(NSString *)params {
309 | NSLog(@"%s, resultType: %ld, params: %@", __FUNCTION__, (long)resultType, params);
310 |
311 | NSString *funcName = @"";
312 | switch (resultType) {
313 | case ResultTypeLoginSuccess:
314 | funcName = @"cc.onFacebookLoginSuccess";
315 | break;
316 | case ResultTypeLoginCancel:
317 | funcName = @"cc.onFacebookLoginCancel";
318 | break;
319 | case ResultTypeLoginError:
320 | funcName = @"cc.onFacebookLoginError";
321 | break;
322 | case ResultTypeShareSuccess:
323 | funcName = @"cc.onFacebookShareSuccess";
324 | break;
325 | case ResultTypeShareCancel:
326 | funcName = @"cc.onFacebookShareCancel";
327 | break;
328 | case ResultTypeShareError:
329 | funcName = @"cc.onFacebookShareError";
330 | break;
331 | default:
332 | funcName = nil;
333 | break;
334 | }
335 |
336 | if (funcName == nil) {
337 | NSLog(@"%s, error: %@", __FUNCTION__, @"funcName is nil");
338 | return;
339 | }
340 |
341 | if (params == nil) {
342 | params = @"";
343 | }
344 |
345 | NSString *eval = [NSString stringWithFormat:@"%@('%@')", funcName, params];
346 | const char *c_eval = [eval UTF8String];
347 | se::ScriptEngine::getInstance()->evalString(c_eval);
348 | }
349 |
350 | @end
351 |
--------------------------------------------------------------------------------
/ts/Facebook.ts:
--------------------------------------------------------------------------------
1 | export default class Facebook {
2 |
3 | /**
4 | * 分享类型
5 | */
6 | public static SHARE_TYPE = {
7 | /**
8 | * 链接
9 | */
10 | LINK: 0,
11 | /**
12 | * 图片
13 | */
14 | PHOTO: 1
15 | }
16 |
17 | /**
18 | * 登录
19 | */
20 | public static login() {
21 | console.log("Facebook login");
22 |
23 | if (cc.sys.isNative) {
24 | if (cc.sys.os == cc.sys.OS_ANDROID) {
25 | let className = "com/util/BridgeUtil";
26 | let methodName = "facebookLogin";
27 | let methodSignature = "()V";
28 | jsb.reflection.callStaticMethod(className, methodName, methodSignature);
29 | } else if (cc.sys.os == cc.sys.OS_IOS) {
30 | let className = "BridgeUtil";
31 | let methodName = "facebookLogin";
32 | jsb.reflection.callStaticMethod(className, methodName);
33 | }
34 | } else {
35 | let authInfo = '{"id":"1111111111111111","name":"Test","gender":"","email":"123456@qq.com","picture":"https://platform-lookaside.fbsbx.com/platform/profilepic/?asid=xxx&height=50&width=50&ext=xxx","avatar":"https://graph.facebook.com/xxx/picture?type=large"}';
36 | cc.onFacebookLoginSuccess(authInfo);
37 | }
38 | }
39 |
40 | /**
41 | * 登出
42 | */
43 | public static logout() {
44 | console.log("Facebook logout");
45 |
46 | if (cc.sys.isNative) {
47 | if (cc.sys.os == cc.sys.OS_ANDROID) {
48 | let className = "com/util/BridgeUtil";
49 | let methodName = "facebookLogout";
50 | let methodSignature = "()V";
51 | jsb.reflection.callStaticMethod(className, methodName, methodSignature);
52 | } else if (cc.sys.os == cc.sys.OS_IOS) {
53 | let className = "BridgeUtil";
54 | let methodName = "facebookLogout";
55 | jsb.reflection.callStaticMethod(className, methodName);
56 | }
57 | }
58 | }
59 |
60 | /**
61 | * 分享
62 | * @param shareType 分享类型 SHARE_TYPE
63 | * @param shareUrl 分享链接
64 | * @param imgPath 图片路径
65 | * @example
66 | * Facebook.share(Facebook.SHARE_TYPE.LINK, 'https://www.cocos.com/', '');
67 | */
68 | public static share(shareType: number, shareUrl: string, imgPath: string) {
69 | console.log("Facebook share shareType = " + shareType + ", shareUrl = " + ", imgPath = " + imgPath);
70 | ß
71 | let data = {
72 | shareType: shareType,
73 | shareUrl: shareUrl,
74 | imgPath: imgPath
75 | };
76 | let shareInfo = JSON.stringify(data);
77 | console.log('Facebook share shareInfo = ' + shareInfo);
78 |
79 | if (cc.sys.isNative) {
80 | if (cc.sys.os == cc.sys.OS_ANDROID) {
81 | let className = "com/util/BridgeUtil";
82 | let methodName = "facebookShare";
83 | let methodSignature = "(Ljava/lang/String;)V";
84 | jsb.reflection.callStaticMethod(className, methodName, methodSignature, shareInfo);
85 | } else if (cc.sys.os == cc.sys.OS_IOS) {
86 | let className = "BridgeUtil";
87 | let methodName = "facebookShare:";
88 | jsb.reflection.callStaticMethod(className, methodName, shareInfo);
89 | }
90 | } else {
91 | cc.onFacebookShareSuccess('test');
92 | }
93 | }
94 | }
95 |
96 | /**
97 | * 登录成功
98 | */
99 | cc.onFacebookLoginSuccess = function (authInfo) {
100 | console.log("onFacebookLoginSuccess authInfo = " + authInfo);
101 | //处理登录逻辑
102 | };
103 |
104 | /**
105 | * 登录取消
106 | */
107 | cc.onFacebookLoginCancel = function () {
108 | console.log("onFacebookLoginCancel");
109 | };
110 |
111 | /**
112 | * 登录错误
113 | */
114 | cc.onFacebookLoginError = function (error) {
115 | console.log("onFacebookLoginError error = " + error);
116 | };
117 |
118 | /**
119 | * 分享成功
120 | */
121 | cc.onFacebookShareSuccess = function (result) {
122 | console.log("onFacebookShareSuccess result = " + result);
123 | //处理分享逻辑
124 | };
125 |
126 | /**
127 | * 分享取消
128 | */
129 | cc.onFacebookShareCancel = function () {
130 | console.log("onFacebookShareCancel");
131 | };
132 |
133 | /**
134 | * 分享错误
135 | */
136 | cc.onFacebookShareError = function (error) {
137 | console.log("onFacebookShareError error = " + error);
138 | };
139 |
--------------------------------------------------------------------------------