在发布之前,我尝试了这个链接 Using App Links Hosting API for link shared on Facebook from iOS app 没有任何成功。这是我的代码
// I have declared my FBSession object here in app delegate.
AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
//Create dict params
NSDictionary *paramsForAppLinksHost = [NSDictionary dictionaryWithObjectsAndKeys:
@"appName", @"name",
@"myScheme://", @"al:ios:url",
@"appStoreId", @"al:ios:app_store_id",
@"appName", @"al:ios:app_name",
@"{should_fallback:false}", @"web",
nil
];
//Call graph API
FBRequest *request = [[FBRequest alloc] initWithSession:appDelegate.mpFacebookSession
graphPath"/app/app_link_hosts"
parameters: paramsForAppLinksHost
HTTPMethod"GET"];
FBRequestHandler handler =
^(FBRequestConnection *connection, id result, NSError *error)
{
// output the results of the request
[self postUrlCompleted:connection result:result error:error];
};
[newConnection addRequest:request completionHandler:handler];
[newConnection start];
结果:打印结果说明: { 数据 = ( ); }
错误:无。
我在这里做错了什么?对我来说,这个 Facebook 文档确实缺乏细节。发生这种情况是因为任何权限问题吗?
首先我想说Facebook doc真的很烂,它从来没有真正详细说明过任何事情,在做了所有这些之后我才知道Mobile Safari不支持应用链接 . 这意味着如果没有 Facebook 应用程序,这将不起作用
所以我们有两个选择。
1.如果我们实现应用链接,这将不适用于没有 fb 应用的人。
如果我们使用 URL 并分享到 FB 并单击它重定向并使用服务器端的某些架构来启动您的应用程序,如果您安装了 Facebook 应用程序,这也不起作用,因为新的 FB 应用程序有自己的浏览器,似乎不支持使用 document.location() 进行重定向。同样在 iOS 8.0 中使用 document.location () 重定向(将使用模式)由于某种原因无法正常工作。所以基本上我被迫使用应用链接
来到我的问题,这是由于参数不匹配但API调用没有说明它,我使用以下代码获取App链接ID。由于我的问题中的链接在那个答案中调用它不起作用,所以我这样使用。希望它能节省一些人的时间。
//获取应用 token ,是应用 token 不是用户 token
> NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
> NSString* pFaceBookAppID = [infoDict objectForKey"FacebookAppID"];
> NSString *pStr = [NSString
> stringWithFormat"https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id=%@&client_secret={app_secret_key}",pFaceBookAppID];
> NSURL* pWebUrl = [NSURL URLWithString:pStr]; NSString *fullToken =
> [NSString stringWithContentsOfURL:pWebUrl
> encoding:NSUTF8StringEncoding error:nil]; NSArray *components =
> [fullToken componentsSeparatedByString"="]; self.mpFBAppToken =
> [components objectAtIndex:1];
//现在可以这样调用获取app ID了,
NSArray *pArray = @[@{@"url":{URL_SCHEMA},@"app_store_id":{app_store_id},@"app_name":{{app_name}}];
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:pArray options:NSJSONWritingPrettyPrinted error:nil];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSDictionary *pDict = @{@"should_fallback" "false"};
jsonData = [NSJSONSerialization dataWithJSONObject:pDict options:NSJSONWritingPrettyPrinted error:nil];
NSString *jsonWebString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
pRequestString = [NSString stringWithFormat"access_token=%@&name={app_name}&ios=%@&web=%@",self.mpFBAppToken,jsonString,jsonWebString];
NSURL* pWebUrl = [NSURL URLWithString"https://graph.facebook.com/app/app_link_hosts"];
NSData *myRequestData = [NSData dataWithBytes:[pRequestString UTF8String] length:[pRequestString length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:pWebUrl];
[request setHTTPMethodOST_METHOD];
[request setValue"application/x-www-form-urlencoded" forHTTPHeaderField:CONTENT_TYPE];
[request setHTTPBody: myRequestData ];
mpConnection = [[NSURLConnection alloc]initWithRequest:request delegate:self] ;
//现在你必须实现连接委托(delegate)函数来获取结果,它将包含应用程序链接 ID,使用它来获取 URL,如下所示。 获取网址..
NSDictionary *pParams = @{@"access_token":self.mpFBAppToken};
[FBRequestConnection startWithGraphPath:self.mpAPPLinkID
parameters:pParams
HTTPMethod"GET"
completionHandler:^(
FBRequestConnection *connection,
id result,
NSError *error
){
}];
//现在在 URL 中只需附加您想要作为查询字符串传递的参数,这样您就可以像这样从应用程序委托(delegate)的 openURL 方法轻松解析它...
> [FBAppCall handleOpenURL:url
> sourceApplication:sourceApplication
> fallbackHandler:^(FBAppCall *call)
> {
> // Retrieve the link associated with the post
> NSURL *targetURL = [[call appLinkData] targetURL];
> if([[targetURL query]length] > 0)
> {
//Parse Query string by some method;
> NSMutableDictionary *pDict = [[NSMutableDictionary alloc]initWithDictionary:[self
> parseURLParams:[targetURL query]]]; } }];
希望这对某人有所帮助。
关于ios -/app/app_link_hosts 图形 API 在 iOS 中不适合我,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28827537/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |