4

昨天 Whatsapp 更新了他们的 iOS 应用程序并发布了官方 URL 方案(api hooks)。

我想玩一点它,我现在面临的问题是我不理解这整个“abid”的东西?!我从哪里获得联系人 ID?那我该如何使用它呢?

提前致谢 :)

4

6 回答 6

10

ABID 代表地址簿记录 ID,下面的代码用于获取 AB 记录 ID。它对在 URL 本身中使用分隔符很敏感。所以最初的试验没有奏效。要将注释发送给特定用户,请使用此 - urlstring 格式:whatsapp://send?abid=123&text=What%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;
    }
}
于 2013-07-22T14:52:18.723 回答
4

请注意,Whatsapp 已删除(在 16 年 3 月期间)URL 架构以打开与特定联系人的对话。

正如您在他们的自定义 URL 方案页面上看到的那样,不再有 ABID 参数。

于 2016-03-31T15:40:54.453 回答
2

我在这里写了一种批量获取 ABID 的方法:http: //n8henrie.com/2014/02/how-to-get-the-abid-for-whatsapp-url-schemes/

基本思想是使用iFunBox访问手机上的 sqlite 数据库,然后运行提取所有 ABID 和名称的脚本。

于 2014-08-18T14:01:38.933 回答
1

最近的两个解决方案(2017 年 7 月)

我在THIS OTHER ANSWER中发现、测试并引用了两个新的不同解决方案(因为我必须将链接添加到解决方案,没有重复)。

于 2017-07-21T00:43:35.033 回答
0

abid 代表地址簿 ID,它是您与 Whatsapp url 方案一起使用的参数,以便使用您在地址簿中拥有的数据。来自Whatsapp 网站

要在您的应用程序中使用 Whatsapp 的 url 方案来发送一条说“Hello World”的文本,您可以执行以下操作(来自网站的示例):

 NSURL *whatsappURL = [NSURL URLWithString:@"whatsapp://send?text=Hello%2C%20World!"];
 if ([[UIApplication sharedApplication] canOpenURL: whatsappURL]) 
 {
  [[UIApplication sharedApplication] openURL: whatsappURL];
 }

但是由于您没有发布任何代码,我真的不能说如何使用上面的内容或将它放在哪里。但是,如果需要,您可以随时查看一些有关使用 URL 方案的教程。

希望这能回答你的问题!

于 2013-07-17T22:39:10.243 回答
-1

对于abid,您可以获取联系人列表,然后选择向特定人发送消息。

  1. 从通讯录中获取记录 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];
        }
    
  2. 获取选定的 RecordID,如:

    NSString *recordID = [dict objectForKey:@"RecordID"];

  3. 调用 Whats app URL Scheme

    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];
    }
    
于 2014-10-17T10:01:10.617 回答