昨天Whatsapp更新了他们的iOS应用程序并发布了官方URL方案(api hooks)。
我想用它玩一点,我现在面临的问题是我不明白这整个“abid”的事情?!我从哪里获得联系人ID?那我该如何使用呢?
提前致谢:)
答案 0 :(得分:10)
ABID代表地址簿记录ID,下面的代码用于获取AB记录ID。它对URL本身中的分隔符的使用很敏感。所以最初的试验没有奏效。要向特定用户发送注释,请使用以下命令:urlstring格式: whatsapp:// send?abid = 123& text =什么%20a%20nice%20day - 注意使用&标记第二个参数。
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
{
QR_whatsappABID = (ABRecordID)ABRecordGetRecordID(person);
....
QR_whatsapp_string = [NSString stringWithFormat:@"whatsapp://send?abid=%d&text=%@;",QR_whatsappABID, outmessage];
....
}
这可以编码而无需使用人员选择器只需打开地址簿:
逐个浏览记录,比较姓名或姓名和号码 -
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions (NULL, error);
int len = (int)ABAddressBookGetPersonCount(addressBook);
for(int i = 1; i < (len + 1); i++) {
ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressBook, (ABRecordID)i);
NSString *first, *last;
if (!person) {
continue;
}
CFStringRef firstc = (CFStringRef)ABRecordCopyValue(person, kABPersonFirstNameProperty);
if (firstc) {
CFStringRef lastc =(CFStringRef) ABRecordCopyValue(person, kABPersonLastNameProperty);
if (lastc) {
first = [NSString stringWithFormat:@"%@",firstc];
last =[NSString stringWithFormat:@"%@",lastc];
CFRelease(lastc);
}
CFRelease(firstc);
}
if ([[first lowercaseString] isEqualToString:[firstname lowercaseString]] && [[last lowercaseString] isEqualToString:[surname lowercaseString]]) {
alreadyExists = YES;
ABID = ABRecordGetRecordID(person);
break;
}
}
答案 1 :(得分:3)
请注意,Whatsapp已删除(在2016年3月期间)URL Schema以打开与特定联系人的对话。
正如您在Custom URL Scheme page上看到的那样,ABID参数不再存在。
答案 2 :(得分:2)
我已经写了一种方法来批量获取ABID:http://n8henrie.com/2014/02/how-to-get-the-abid-for-whatsapp-url-schemes/
基本思想是使用iFunBox访问手机上的sqlite数据库,然后运行一个提取所有ABID和名称的脚本。
答案 3 :(得分:1)
我在THIS OTHER ANSWER找到,测试并提到了两个新的不同解决方案(因为S.O.政策我必须提供解决方案的链接,没有重复)。
答案 4 :(得分:0)
abid代表Adress Book ID,它是您与Whatsapp网址方案一起使用的参数,以便使用您地址簿中的数据。来自Whatsapp site。
要在您的应用中使用Whatsapp的网址方案发送一个说“Hello World”的文字,您可以执行以下操作(例如网站上的示例):
NSURL *whatsappURL = [NSURL URLWithString:@"whatsapp://send?text=Hello%2C%20World!"];
if ([[UIApplication sharedApplication] canOpenURL: whatsappURL])
{
[[UIApplication sharedApplication] openURL: whatsappURL];
}
但是由于你没有发布任何代码,我真的不能说如何使用上面或者把它放在哪里。但是,如果需要,您可以随时查看有关使用URL方案的一些教程。
希望能回答你的问题!
答案 5 :(得分:-1)
对于abid,您可以获取联系人列表,然后选择向特定的人发送消息。
从AddressBook获取记录ID
contactList=[[NSMutableArray alloc] init];
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(m_addressbook);
CFIndex nPeople = ABAddressBookGetPersonCount(m_addressbook);
for (int i=0;i<nPeople;i++) {
NSMutableDictionary *dOfPerson=[[NSMutableDictionary alloc] init];
ABRecordRef ref = CFArrayGetValueAtIndex(allPeople,i);
NSNumber *recordId = [NSNumber numberWithInteger:ABRecordGetRecordID(ref)];
[dOfPerson setObject:recordId forKey:@"RecordID"];
[contactList addObject:dOfPerson];
}
获取选定的RecordID,如:
NSString * recordID = [dict objectForKey:@“RecordID”];
调用什么应用程序URL方案
NSString *str = [NSString stringWithFormat:@"whatsapp://send?text=Whenitize&abid=%@",recordID];
NSLog(@"%@", str);
NSURL *whatsappURL = [NSURL URLWithString:str];
if ([[UIApplication sharedApplication] canOpenURL:whatsappURL]) {
[[UIApplication sharedApplication] openURL:whatsappURL];
} else {
[[[UIAlertView alloc] initWithTitle:@"" message:@"Please install What's App in your device." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
}